Commit Graph

19481 Commits

Author SHA1 Message Date
Jan Beulich
af3394d97a ELF: SHF_STRINGS isn't really tied to SHF_MERGE
It's not overly useful without it, but the spec doesn't name any
dependency between the two. People may want to use it for purely
informational purposes, for example. Adjust, in particular, entity size
processing to be engaged if either flag is set, as mandated by the spec.
2024-11-18 11:36:57 +01:00
Jan Beulich
70ab7e0acf ELF: SHF_MERGE vs SHT_NOBITS
bfd/merge.c puts in quite some effort to track mergable sections. That's
all wasted for sections which don't have contents, as for them
_bfd_write_merged_section() will never be called.

With the combination not having any useful effect, also warn about this
in gas.
2024-11-18 11:36:30 +01:00
Sam James
931e4f9b09
bfd: fix -std=gnu23 compatibility wrt _Bool
GCC trunk now defaults to -std=gnu23. We return false in a few places
which can't work when true/false are a proper type (_Bool). Return NULL
where appropriate instead of false. All callers handle this appropriately.

ChangeLog:
	PR ld/32372

	* elf32-ppc.c (ppc_elf_tls_setup): Return NULL.
        * elf32-xtensa.c (translate_reloc_bfd_fix): Ditto.
        (translate_reloc): Ditto.
        * elf64-ppc.c (update_local_sym_info): Ditto.
        * mach-o.c (bfd_mach_o_lookup_uuid_command): Ditto.
        * xsym.c (bfd_sym_read_name_table): Ditto.
2024-11-18 03:09:14 +00:00
GDB Administrator
5b61986ac1 Automatic date update in version.in 2024-11-18 00:00:30 +00:00
H.J. Lu
c0e7f91064 x86-64: Always check IBT PLT before BND PLT
Since BND PLT has been deprecated and the same IBT PLT is used for both
x86-64 and x32, always check IBT PLT before BND PLT when synthesizing
PLT symtab.

	* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Always check
	elf_x86_64_lazy_ibt_plt and elf_x86_64_non_lazy_ibt_plt first.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2024-11-17 09:21:47 +08:00
H.J. Lu
231a8ab70f x86-64: Drop x32 references in PLT entry variables
e9c11d58b9 x86-64: Remove BND from 64-bit IBT PLT

removed the BND prefix from 64-bit IBT PLT by using x32 IBT PLT.

Drop x32 references in PLT entry variables.

	* elf64-x86-64.c (elf_x86_64_lazy_ibt_plt_entry): Renamed to ...
	(elf_x86_64_lazy_bnd_ibt_plt_entry): This.
	(elf_x32_lazy_ibt_plt_entry): Renamed to ...
	(elf_x86_64_lazy_ibt_plt_entry): This.
	(elf_x86_64_non_lazy_ibt_plt_entry): Renamed to ...
	(elf_x86_64_non_lazy_bnd_ibt_plt_entry): This.
	(elf_x32_non_lazy_ibt_plt_entry): Renamed to ...
	(elf_x86_64_non_lazy_ibt_plt_entry): This.
	(elf_x86_64_eh_frame_lazy_ibt_plt): Renamed to ...
	(elf_x86_64_eh_frame_lazy_bnd_ibt_plt): This.
	(elf_x32_eh_frame_lazy_ibt_plt): Renamed to ...
	(elf_x86_64_eh_frame_lazy_ibt_plt): This.
	(elf_x86_64_lazy_ibt_plt): Renamed to ...
	(elf_x86_64_lazy_bnd_ibt_plt): This.  Updated.
	(elf_x32_lazy_ibt_plt): Renamed to ...
	(elf_x86_64_lazy_ibt_plt): This.  Updated.
	(elf_x86_64_non_lazy_ibt_plt): Renamed to ...
	(elf_x86_64_non_lazy_bnd_ibt_plt): This.  Updated.
	(elf_x32_non_lazy_ibt_plt): Renamed to ...
	(elf_x86_64_non_lazy_ibt_plt): This.  Updated.
	(elf_x86_64_get_synthetic_symtab): Updated.
	(elf_x86_64_link_setup_gnu_properties): Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2024-11-17 08:48:28 +08:00
GDB Administrator
ece531604d Automatic date update in version.in 2024-11-17 00:00:53 +00:00
GDB Administrator
63a8afc8e9 Automatic date update in version.in 2024-11-16 00:00:41 +00:00
GDB Administrator
75e1141293 Automatic date update in version.in 2024-11-15 00:00:26 +00:00
GDB Administrator
768f23b94f Automatic date update in version.in 2024-11-14 00:00:31 +00:00
GDB Administrator
2e7d431af8 Automatic date update in version.in 2024-11-13 00:00:15 +00:00
Mark Wielaard
14bc3b1b83 bfd: Add WARN_CFLAGS_FOR_BUILD to doc/chew.c build, fix warnings
doc/chew.c was compiled without any warning flags set. Adding the
common warnings for build showed various issues with non-static
functions missing prototypes and globals with common names (ptr and
idx) that shadowed local arguments or variables.

     * doc/local.mk (doc/chew.stamp): Add WARN_CFLAGS_FOR_BUILD.
     * Makefile.in: Regenerate.
     * doc/chew.c (idx): Rename to pos_idx.
     (ptr): Rename to buf_ptr.
     (xmalloc): Make static.
     (xrealloc): Likewise.
     (xstrdup): Likewise.
     (nextword): Likewise.
     (newentry): Likewise.
     (add_to_definition): Likewise.
     (add_intrinsic): Likewise.
     (compile): Likewise.
     (icopy_past_newline): Rename idx to pos_idx, ptr to buf_ptr.
     (get_stuff_in_command): Likewise.
     (skip_past_newline): Likewise.
     (perform): Likewise.
     (main): Likewise.
2024-11-12 22:39:33 +01:00
Alan Modra
510fa4aadb Remove redundant section merge hash table field
sec_merge_hash.size duplicates sec_merge_hash.table.count, albeit using
bfd_size_type rather than unsigned int.  The only reason to have the
duplicate field is to catch unsigned int overflows, and that can be
done easily enough when and if required.  Overflow isn't possible at
the moment.  See the needs_resize comment.

	* merge.c (sec_merge_hash): Remove "size" field.
	(NEEDS_RESIZE): Delete macro, replacing with..
	(needs_resize): ..this inline function.
	(sec_merge_resize): Rename from sec_merge_maybe_resize,
	removing redundant check.
	(sec_merge_hash_insert, sec_merge_hash_lookup): Adjust to suit.
	(sec_merge_init, merge_strings): Likewise.
2024-11-12 17:06:35 +10:30
Alan Modra
e032307191 Re: tekhex object file output fixes
Commit 8b5a212495 supported *ABS* symbols by allowing "section" to be
bfd_abs_section, but bfd_abs_section needs to be treated specially.
In particular, bfd_get_next_section_by_name (.., bfd_abs_section_ptr)
is invalid.

	PR 32347
	* tekhex.c (first_phase): Guard against modification of
	_bfd_std_section[] entries.
2024-11-12 17:06:35 +10:30
GDB Administrator
912f10fba9 Automatic date update in version.in 2024-11-12 00:00:36 +00:00
Xin Wang
599df6e2db ld, LoongArch: print error about linking without -fPIC or -fPIE flag in more detail 2024-11-11 12:02:35 +08:00
GDB Administrator
9f4d8151ee Automatic date update in version.in 2024-11-11 00:00:58 +00:00
GDB Administrator
3da8ce337c Automatic date update in version.in 2024-11-10 00:00:12 +00:00
GDB Administrator
2500edfc27 Automatic date update in version.in 2024-11-09 00:01:04 +00:00
Mark Wielaard
328f42d85b bfd: Remove unused static find function from doc/chew.c
After commit 2e60790cf7 "Remove the
paramstuff word" there is no caller left of the static find function
in doc/chew.c, so it should be removed.

* doc/chew.c (find): Remove.
2024-11-08 11:08:56 +01:00
GDB Administrator
01086f8a21 Automatic date update in version.in 2024-11-08 00:00:33 +00:00
GDB Administrator
8adee4d2ce Automatic date update in version.in 2024-11-07 00:00:53 +00:00
GDB Administrator
52a8387dfd Automatic date update in version.in 2024-11-06 00:00:43 +00:00
GDB Administrator
e1e4078ac5 Automatic date update in version.in 2024-11-05 00:00:32 +00:00
GDB Administrator
55e32b3c68 Automatic date update in version.in 2024-11-04 00:00:32 +00:00
GDB Administrator
69a9577358 Automatic date update in version.in 2024-11-03 00:00:17 +00:00
GDB Administrator
22d7506fb9 Automatic date update in version.in 2024-11-02 00:00:22 +00:00
Indu Bhagat
47c88752f9 ld: generate SFrame stack trace info for .plt.got
PR/32298 sframe: no SFrame stack trace info generated for .plt.got

Add support to generate SFrame stack trace info for .plt.got section.
Enhance the current definition of struct elf_x86_sframe_plt to include
initialized SFrame FDE/FREs applicable for .plt.got section.  There are
two variants of .plt.got entries: 16 byte and 8 byte.

8 byte:
    ff 25 00 00 00 00     jmpq  *name@GOTPCREL(%rip)
    66 90                 xchg  %ax,%ax

16 byte:
    f3 0f 1e fa           endbr64
    ff 25 66 2f 00 00     jmpq  *name@GOTPCREL(%rip)
    66 0f 1f 44 00 00     nopw   0x0(%rax,%rax,1)

For the testcase, define some application symbols such that their PLT
entry is placed in .plt.got and ensure SFrame information is generated
with and without -z ibtplt.

ChangeLog:
	PR/32298
	* bfd/elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties):
	PLT GOT entry size is different for IBT vs non IBT PLTs.
	* bfd/elfxx-x86.c (enum dynobj_sframe_plt_type): New enum for
	SFRAME_PLT_GOT.
	(_bfd_x86_elf_create_sframe_plt): Handle SFRAME_PLT_GOT.
	(_bfd_x86_elf_write_sframe_plt): Likewise.
	(_bfd_x86_elf_late_size_sections): Likewise.
	(_bfd_x86_elf_finish_dynamic_sections): Likewise.
	* bfd/elfxx-x86.h (struct elf_x86_sframe_plt): Add new members
	to keep information about PLT GOT entries.
	(struct elf_x86_link_hash_table): Add support for creating
	SFrame section for .plt.got.
	* ld/testsuite/ld-x86-64/x86-64.exp: Add new tests.
	* ld/testsuite/ld-x86-64/sframe-pltgot-1.d: New test.
	* ld/testsuite/ld-x86-64/sframe-pltgot-1.s: New test.
	* ld/testsuite/ld-x86-64/sframe-pltgot-2.d: New test.
2024-11-01 15:36:35 -07:00
Josh Poimboeuf
938fb51218 ld: fix wrong SFrame info for lazy IBT PLT
Fix PR/32296 sframe: wrong SFrame info for pltN and .plt.sec for -z ibtplt

The x86 psABI defines a 2-PLT scheme for IBT which uses .plt and
.plt.sec entries.  It was observed that SFrame information for .plt.sec
section was incorrect.  The erroneous assumption was that SFrame stack
trace information for .plt.sec with lazy binding is the same as SFrame
stack trace information for .plt with lazy binding.  This is corrected
now by initializing a new SFrame PLT helper object
elf_x86_64_sframe_ibt_plt for lazy PLT with IBT.

Add a testcase where linking with -z ibtplt generates .plt.sec entries and
ensure correct SFrame information for it.

Committed by Indu Bhagat.

ChangeLog:
	PR/32296
	* bfd/elf64-x86-64.c (elf_x86_64_sframe_ibt_pltn_fre2): New
	definition elf_x86_64_sframe_ibt_plt.  Use it in
	elf_x86_64_sframe_plt.
	(elf_x86_64_link_setup_gnu_properties): Lazy IBT PLT entries are
	different from lazy PLT.
        * bfd/elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Adjust for
	SFrame for IBT PLT.
        * ld/testsuite/ld-x86-64/x86-64.exp: Add new test.
        * ld/testsuite/ld-x86-64/sframe-ibt-plt-1.d: New test.
2024-11-01 15:36:03 -07:00
Josh Poimboeuf
1785837a25 ld: fix PR/32297
When _creating_ SFrame information for the linker created .plt.sec, the
code correctly checks for presence of .plt.sec.  When _writing_ the
SFrame section for the corresponding .plt.sec, however, the conditionals
were wrongly checking for splt.  This was causing an assertion at link
time.

This issue has been known to affect glibc build with SFrame enabled.

No testcase is added just yet.  A later commit ensures correct SFrame
stack trace information is created for .plt.got. A test case (where only
.plt and .plt.got are created) is added then.

PR/32297 sframe: bfd assertion with empty main on IBT enabled system

Committed by Indu Bhagat.

ChangeLog:
	PR/32297
	* bfd/elfxx-x86.c (_bfd_x86_elf_late_size_sections): Check for
	  plt_second member not for splt.
2024-11-01 15:31:21 -07:00
GDB Administrator
893e4fd623 Automatic date update in version.in 2024-11-01 00:00:55 +00:00
GDB Administrator
4868f6025e Automatic date update in version.in 2024-10-31 00:00:21 +00:00
GDB Administrator
0a81e17f76 Automatic date update in version.in 2024-10-30 00:00:53 +00:00
Lulu Cai
287938873c LoongArch: Corrected to GNU style code 2024-10-29 15:56:52 +08:00
GDB Administrator
ad909bee05 Automatic date update in version.in 2024-10-29 00:00:56 +00:00
GDB Administrator
b391a8b043 Automatic date update in version.in 2024-10-28 00:00:27 +00:00
GDB Administrator
9af55b9568 Automatic date update in version.in 2024-10-27 00:00:22 +00:00
Alan Modra
b3ee98cda4 tekhex.c tidy writesym
Simplifies the code a little.  No functional changes.
2024-10-26 10:28:10 +10:30
GDB Administrator
be6d665abd Automatic date update in version.in 2024-10-25 00:00:31 +00:00
Alan Modra
8b5a212495 tekhex object file output fixes
writevalue didn't handle 64-bit values, dropping the high 32 bits,
and also wrote any value in the range [0,15] as 0.

	* tekhex.c (first_phase): Handle *ABS* symbols.
	(writevalue): Rewrite.
2024-10-24 17:58:00 +10:30
GDB Administrator
4598f83eac Automatic date update in version.in 2024-10-24 00:00:32 +00:00
GDB Administrator
538271a1e0 Automatic date update in version.in 2024-10-23 00:00:49 +00:00
Michael Matz
8483536dea stringmerge: don't presize hash table
originally the reason for pre-sizing was that that's easier
for a multi-threaded use of the hash table.  That hasn't materialized
yet, so there's not much sense in using the very very conservative
estimates for pre-sizing.  Doing the resize on-demand, whenever we
actually need to add a new entry doesn't change performance.

	bfd/
	merge.c (sec_merge_hash_insert): Resize as needed from here ...
	(record_section): ... not from here.  Don't calculate estimates,
	return bool instead of three-state, regard all errors as soft
	errors.
	(_bfd_merge_sections): Adjust.
2024-10-22 14:14:32 +02:00
Lulu Cai
3790b9f7ff LoongArch: Force relocation for every reference to the global offset table
Local absolute symbols are resolved at assembly stage and the symbol
value is placed in the relocation addend. But non-zero addend will
cause an assertion failure during linking.

Forces emission of relocations to defer resolution of local abs symbols
until link time.

bfd/

        * elfnn-loongarch.c (loongarch_elf_relax_section): Determine
          absolute symbols in advance to avoid ld crash.

gas/

        * config/tc-loongarch.c (loongarch_force_relocation): New
          function to force relocation.
        * config/tc-loongarch.h (TC_FORCE_RELOCATION): New macros
          to force relocation.
        (loongarch_force_relocation): Function declaration.
        * testsuite/gas/loongarch/localpic.d: New test.
        * testsuite/gas/loongarch/localpic.s: New test.
2024-10-22 12:01:41 +08:00
GDB Administrator
4806ed93bc Automatic date update in version.in 2024-10-22 00:00:23 +00:00
GDB Administrator
0740c33685 Automatic date update in version.in 2024-10-21 00:00:24 +00:00
Alan Modra
32dc367249 Report bfd_merge_sections error
PR 32260
bfd/
	* elfxx-target.h (bfd_elfNN_bfd_merge_sections): Default to
	bfd_generic_merge_sections when using the generic linker.
	* elflink.c (_bfd_elf_merge_sections): Return error from
	_bfd_merge_sections.  Abort on wrong hash table.
ld/
	* ldlang.c (lang_process): Report bfd_merge_sections error.
2024-10-20 17:15:53 +10:30
GDB Administrator
17b145510f Automatic date update in version.in 2024-10-20 00:00:20 +00:00
GDB Administrator
f4b00218b5 Automatic date update in version.in 2024-10-19 00:00:25 +00:00
GDB Administrator
0e15fd3d54 Automatic date update in version.in 2024-10-18 00:00:30 +00:00