From f12650bff1a591357c26e0ef6d7be0323f76fdb8 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Sun, 13 Dec 2020 15:19:41 -0800 Subject: [PATCH] Fix incremental linking with rodata merge sections. When processing the incremental update, incoming .rodata merge sections do not match the corresponding section in the base file, because the SHF_MERGE flag had not been masked out of the latter. gold/ PR gold/24123 * layout.cc (Layout::init_fixed_output_section): Mask out flags that should be ignored when matching sections. --- gold/ChangeLog | 6 ++++++ gold/layout.cc | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index e152e1ed698..bfb7a7002ac 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2020-12-13 Cary Coutant + + PR gold/24123 + * layout.cc (Layout::init_fixed_output_section): Mask out flags that + should be ignored when matching sections. + 2020-12-07 Alan Modra * plugin.cc (Plugin_recorder::init): Replace strncpy with memcpy. diff --git a/gold/layout.cc b/gold/layout.cc index 8563f110995..8acfb960d12 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -1099,7 +1099,8 @@ Layout::init_fixed_output_section(const char* name, typename elfcpp::Elf_types::Elf_Addr sh_addr = shdr.get_sh_addr(); typename elfcpp::Elf_types::Elf_Off sh_offset = shdr.get_sh_offset(); typename elfcpp::Elf_types::Elf_WXword sh_size = shdr.get_sh_size(); - typename elfcpp::Elf_types::Elf_WXword sh_flags = shdr.get_sh_flags(); + typename elfcpp::Elf_types::Elf_WXword sh_flags = + this->get_output_section_flags(shdr.get_sh_flags()); typename elfcpp::Elf_types::Elf_WXword sh_addralign = shdr.get_sh_addralign(); -- 2.30.2