https://sourceware.org/bugzilla/show_bug.cgi?id=22870
Alan Modra <amodra at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amodra at gmail dot com --- Comment #1 from Alan Modra <amodra at gmail dot com> --- gas is generating enormous chains of symbols. (gdb) set args ../pr22870-big.s (gdb) r Starting program: /home/alan/build/gas/aarch64-linux/gas/as-new ../pr22870-big.s C-c C-c Program received signal SIGINT, Interrupt. 0x0000000000423277 in S_GET_SEGMENT (s=<optimised out>) at /home/alan/src/binutils-gdb/gas/symbols.c:2221 2221 return s->bsym->section; (gdb) up #1 resolve_symbol_value (symp=0xb93b70, symp@entry=0xb93ab0) at /home/alan/src/binutils-gdb/gas/symbols.c:1177 1177 seg_left = S_GET_SEGMENT (add_symbol); (gdb) p *add_symbol $1 = {sy_flags = {sy_local_symbol = 1, sy_written = 0, sy_resolved = 0, sy_resolving = 0, sy_used_in_reloc = 0, sy_used = 0, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, bsym = 0x7df660, sy_value = {X_add_symbol = 0xb938a0, X_op_symbol = 0xb93970, X_add_number = 0, X_op = O_illegal, X_unsigned = 0, X_extrabit = 0, X_md = 0}, sy_next = 0x1304c, sy_previous = 0x0, sy_frag = 0x0, sy_obj = {local = 12140608, size = 0x0, versioned_name = 0x0}, sy_tc = 0} (gdb) p *((struct local_symbol *)add_symbol) $2 = {lsy_flags = {sy_local_symbol = 1, sy_written = 0, sy_resolved = 0, sy_resolving = 0, sy_used_in_reloc = 0, sy_used = 0, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, lsy_section = 0x7df660, lsy_name = 0xb938a0 ".LVU4166", u = {lsy_frag = 0xb93970, lsy_sym = 0xb93970}, lsy_value = 0} (gdb) up #2 0x0000000000422d80 in resolve_symbol_value (symp=0xb96020, symp@entry=0xb95f60) at /home/alan/src/binutils-gdb/gas/symbols.c:1176 1176 left = resolve_symbol_value (add_symbol); (gdb) p *add_symbol $3 = {sy_flags = {sy_local_symbol = 1, sy_written = 0, sy_resolved = 0, sy_resolving = 0, sy_used_in_reloc = 0, sy_used = 0, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, bsym = 0x7df660, sy_value = {X_add_symbol = 0xb93aa0, X_op_symbol = 0xb93b70, X_add_number = 0, X_op = O_illegal, X_unsigned = 0, X_extrabit = 0, X_md = 0}, sy_next = 0x1304c, sy_previous = 0x0, sy_frag = 0x0, sy_obj = {local = 12140800, size = 0x0, versioned_name = 0x0}, sy_tc = 0} (gdb) p *((struct local_symbol *)add_symbol) $4 = {lsy_flags = {sy_local_symbol = 1, sy_written = 0, sy_resolved = 0, sy_resolving = 0, sy_used_in_reloc = 0, sy_used = 0, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, lsy_section = 0x7df660, lsy_name = 0xb93aa0 ".LVU4167", u = {lsy_frag = 0xb93b70, lsy_sym = 0xb93b70}, lsy_value = 0} (gdb) up 99999 #4663 main (argc=<optimised out>, argv=<optimised out>) at /home/alan/src/binutils-gdb/gas/as.c:1283 1283 perform_an_assembly_pass (argc, argv); (gdb) down #4662 0x0000000000403fb8 in perform_an_assembly_pass (argv=0x7c8e98, argc=<optimised out>) at /home/alan/src/binutils-gdb/gas/as.c:1161 1161 read_a_source_file (*argv); (gdb) #4661 0x000000000041ec4b in read_a_source_file (name=<optimised out>) at /home/alan/src/binutils-gdb/gas/read.c:1148 1148 (*pop->poc_handler) (pop->poc_val); (gdb) #4660 0x000000000041c32f in cons_worker (nbytes=8, rva=0) at /home/alan/src/binutils-gdb/gas/read.c:4081 4081 ret = TC_PARSE_CONS_EXPRESSION (&exp, (unsigned int) nbytes); (gdb) #4659 0x000000000040f49d in expr (rankarg=rankarg@entry=0, resultP=resultP@entry=0x7fffffffda80, mode=mode@entry=expr_normal) at /home/alan/src/binutils-gdb/gas/expr.c:1807 1807 retval = operand (resultP, mode); (gdb) #4658 0x000000000040f21f in operand (expressionP=expressionP@entry=0x7fffffffda80, mode=mode@entry=expr_normal) at /home/alan/src/binutils-gdb/gas/expr.c:1357 1357 expressionP->X_add_number = S_GET_VALUE (symbolP); (gdb) p *symbolP $5 = {sy_flags = {sy_local_symbol = 0, sy_written = 0, sy_resolved = 0, sy_resolving = 1, sy_used_in_reloc = 0, sy_used = 1, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, bsym = 0xf7fc70, sy_value = {X_add_symbol = 0xf81fd0, X_op_symbol = 0x0, X_add_number = 1, X_op = O_symbol, X_unsigned = 1, X_extrabit = 0, X_md = 0}, sy_next = 0xf827c0, sy_previous = 0xf82290, sy_frag = 0x7c6f60 <zero_address_frag>, sy_obj = {local = 0, size = 0x0, versioned_name = 0x0}, sy_tc = 0} (gdb) p *symbolP->bsym $6 = {the_bfd = 0x7de110, name = 0xf82300 ".LVU8808", value = 0, flags = 0, section = 0x7a0590 <_bfd_std_section+560>, udata = {p = 0x0, i = 0}} (gdb) down #4657 0x000000000042386c in S_GET_VALUE (s=<optimised out>, s@entry=0xf82310) at /home/alan/src/binutils-gdb/gas/symbols.c:1964 1964 valueT val = resolve_symbol_value (s); (gdb) #4656 0x0000000000422d80 in resolve_symbol_value (symp=symp@entry=0xf82310) at /home/alan/src/binutils-gdb/gas/symbols.c:1176 1176 left = resolve_symbol_value (add_symbol); (gdb) p *add_symbol $7 = {sy_flags = {sy_local_symbol = 1, sy_written = 0, sy_resolved = 0, sy_resolving = 0, sy_used_in_reloc = 0, sy_used = 0, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, bsym = 0x7df660, sy_value = {X_add_symbol = 0xf81fc0, X_op_symbol = 0xf82090, X_add_number = 0, X_op = O_illegal, X_unsigned = 0, X_extrabit = 0, X_md = 0}, sy_next = 0x1304c, sy_previous = 0x0, sy_frag = 0x0, sy_obj = {local = 16251728, size = 0x0, versioned_name = 0x0}, sy_tc = 0} (gdb) p *((struct local_symbol *)add_symbol) $8 = {lsy_flags = {sy_local_symbol = 1, sy_written = 0, sy_resolved = 0, sy_resolving = 0, sy_used_in_reloc = 0, sy_used = 0, sy_volatile = 0, sy_forward_ref = 0, sy_mri_common = 0, sy_weakrefr = 0, sy_weakrefd = 0}, lsy_section = 0x7df660, lsy_name = 0xf81fc0 ".LVU8807", u = {lsy_frag = 0xf82090, lsy_sym = 0xf82090}, lsy_value = 0} (gdb) So .LVU8808 is defined from .LVU8807, which is defined from ... all the way down to at least .LVU4166 (where the symbol resolution was interrupted) and I'll bet down to .LVU1. What's more, this symbol resolution is happening before finalize_syms is set so the value calculated for .LVU8808 won't be saved and thus won't cut short the recursion when gas wants the value for .LVU8809. -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils