https://sourceware.org/bugzilla/show_bug.cgi?id=32870
Bug ID: 32870
Summary: [ARM32] Error occurs when linking with LLVMgold.so
plugin under LTO optimization
Product: binutils
Version: 2.41
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: dongjianqiang2 at huawei dot com
Target Milestone: ---
Reproduction environment:
- Toolchain: LLVM 15.0.4 + binutils 2.41
- testcase main.c: int main() { return 0;}
- Flags: clang main.c -flto=thin -O2 -fuse-ld=ld -v --save-temps
-Wl,-plugin-opt=save-temps
- Core dump info: ld: main.o (symbol from plugin): Number of symbols in input
file has increased from 0 to 1
- bt info: elf32_arm_output_arch_local_syms (output_bfd=0x5555557eddc0,
info=0x5555557870c0 <link_info>, flaginfo=0x7fffffffd930, func=0x55555563ff32
<elf_link_output_symstrtab>) at /binutils-gdb/bfd/elf32-arm.c:18362
18362 if (local_iplt[i] != NULL
(gdb) p *input_bfd
$6 = {filename = 0x5555558499b0 "main.o (symbol from plugin)", xvec =
0x555555783200 <elf32_le_vec>, iostream = 0x555555808980, iovec =
0x555555775180 <_bfd_memory_iovec>, lru_prev = 0x0,
lru_next = 0x0, where = 90, mtime = 0, id = 4294967292, flags = 71696, format
= bfd_object, direction = read_direction, last_io = bfd_io_read, cacheable = 0,
target_defaulted = 1, opened_once = 0,
mtime_set = 0, no_export = 0, output_has_begun = 0, has_armap = 0,
is_thin_archive = 0, no_element_cache = 0, selective_search = 0,
is_linker_output = 0, is_linker_input = 0,
plugin_format = bfd_plugin_unknown, lto_output = 0, lto_slim_object = 0,
read_only = 0, plugin_dummy_bfd = 0x0, origin = 0, proxy_origin = 0,
section_htab = {table = 0x555555864a10,
newfunc = 0x5555555d25a2 <bfd_section_hash_newfunc>, memory =
0x555555857df0, size = 4051, count = 1, entsize = 304, frozen = 0}, sections =
0x555555852f28, section_last = 0x555555852f28,
section_count = 1, archive_plugin_fd = -1, archive_plugin_fd_open_count = 0,
archive_pass = 0, alloc_size = 16069, start_address = 0, outsymbols = 0x0,
symcount = 0, dynsymcount = 0,
arch_info = 0x555555775060 <bfd_default_arch_struct>, size = 324, arelt_data
= 0x0, my_archive = 0x0, archive_next = 0x0, archive_head = 0x0,
nested_archives = 0x0, link = {next = 0x555555855980,
hash = 0x555555855980}, tdata = {aout_data = 0x55555585ba40, aout_ar_data =
0x55555585ba40, coff_obj_data = 0x55555585ba40, pe_obj_data = 0x55555585ba40,
xcoff_obj_data = 0x55555585ba40,
ecoff_obj_data = 0x55555585ba40, srec_data = 0x55555585ba40, verilog_data =
0x55555585ba40, ihex_data = 0x55555585ba40, tekhex_data = 0x55555585ba40,
elf_obj_data = 0x55555585ba40,
mmo_data = 0x55555585ba40, trad_core_data = 0x55555585ba40, som_data =
0x55555585ba40, hpux_core_data = 0x55555585ba40, hppabsd_core_data =
0x55555585ba40, sgi_core_data = 0x55555585ba40,
lynx_core_data = 0x55555585ba40, osf_core_data = 0x55555585ba40,
cisco_core_data = 0x55555585ba40, netbsd_core_data = 0x55555585ba40,
mach_o_data = 0x55555585ba40, mach_o_fat_data = 0x55555585ba40,
plugin_data = 0x55555585ba40, pef_data = 0x55555585ba40, pef_xlib_data =
0x55555585ba40, sym_data = 0x55555585ba40, any = 0x55555585ba40}, usrdata =
0x55555578a4e0, memory = 0x555555830c80,
build_id = 0x0}
After analysis, I identified that the main.o (which is a bitcode file) should
not be processed in this context. The fix was implemented by referencing
modifications made in similar cases, and the corresponding patch is attached
below.
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 3b7cee3de1c..3af964ce034 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -18345,6 +18345,9 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
struct arm_local_iplt_info **local_iplt;
unsigned int i, num_syms;
+ if (!is_arm_elf (input_bfd))
+ continue;
+
local_iplt = elf32_arm_local_iplt (input_bfd);
if (local_iplt != NULL)
{
Please let me know if you have any questions.
--
You are receiving this mail because:
You are on the CC list for the bug.