aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf-bfd.h
diff options
context:
space:
mode:
authormengqinggang <mengqinggang@loongson.cn>2024-01-24 14:34:26 +0800
committerliuzhensong <liuzhensong@loongson.cn>2024-03-31 14:21:00 +0800
commitdaeda14191c1710ce967259a47ef4e0a3fb6eebf (patch)
treed812149875b5903fde600bb0e71a17f112b81df2 /bfd/elf-bfd.h
parentc7a5bea4c62f286df830418de694821c7617cccd (diff)
downloadgdb-daeda14191c1710ce967259a47ef4e0a3fb6eebf.zip
gdb-daeda14191c1710ce967259a47ef4e0a3fb6eebf.tar.gz
gdb-daeda14191c1710ce967259a47ef4e0a3fb6eebf.tar.bz2
BFD: Fix the bug of R_LARCH_AGLIN caused by discard section
To represent the first and third expression of .align, R_LARCH_ALIGN need to associate with a symbol. We define a local symbol for R_LARCH_AGLIN. But if the section of the local symbol is discarded, it may result in a undefined symbol error. Instead, we use the section name symbols, and this does not need to add extra symbols. During partial linking (ld -r), if the symbol associated with a relocation is STT_SECTION type, the addend of relocation needs to add the section output offset. We prevent it for R_LARCH_ALIGN. The elf_backend_data.rela_normal only can set all relocations of a target to rela_normal. Add a new function is_rela_normal to elf_backend_data, it can set part of relocations to rela_normal.
Diffstat (limited to 'bfd/elf-bfd.h')
-rw-r--r--bfd/elf-bfd.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index c5d3254..af507b9 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1721,6 +1721,10 @@ struct elf_backend_data
backend relocate_section routine for relocatable linking. */
unsigned rela_normal : 1;
+ /* Whether a relocation is rela_normal. Compared with rela_normal,
+ is_rela_normal can set part of relocations to rela_normal. */
+ bool (*is_rela_normal) (Elf_Internal_Rela *);
+
/* Set if DT_REL/DT_RELA/DT_RELSZ/DT_RELASZ should not include PLT
relocations. */
unsigned dtrel_excludes_plt : 1;