remove unused patches
This commit is contained in:
parent
c0d31e974b
commit
9c952780c9
@ -1,944 +0,0 @@
|
|||||||
diff -rup binutils.orig/bfd/.gitignore binutils-2.37/bfd/.gitignore
|
|
||||||
--- binutils.orig/bfd/.gitignore 2021-12-01 13:35:33.826078119 +0000
|
|
||||||
+++ binutils-2.37/bfd/.gitignore 2021-12-01 13:35:43.138988270 +0000
|
|
||||||
@@ -10,6 +10,7 @@
|
|
||||||
/peigen.c
|
|
||||||
/pepigen.c
|
|
||||||
/pex64igen.c
|
|
||||||
+/pe-aarch64igen.c
|
|
||||||
/stmp-bfd-h
|
|
||||||
/targmatch.h
|
|
||||||
|
|
||||||
diff -rup binutils.orig/bfd/Makefile.am binutils-2.37/bfd/Makefile.am
|
|
||||||
--- binutils.orig/bfd/Makefile.am 2021-12-01 13:35:33.817078206 +0000
|
|
||||||
+++ binutils-2.37/bfd/Makefile.am 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -567,7 +567,9 @@ BFD64_BACKENDS = \
|
|
||||||
mach-o-aarch64.lo \
|
|
||||||
mach-o-x86-64.lo \
|
|
||||||
mmo.lo \
|
|
||||||
+ pe-aarch64igen.lo \
|
|
||||||
pe-x86_64.lo \
|
|
||||||
+ pei-aarch64lo \
|
|
||||||
pei-ia64.lo \
|
|
||||||
pei-x86_64.lo \
|
|
||||||
pepigen.lo \
|
|
||||||
@@ -607,6 +609,7 @@ BFD64_BACKENDS_CFILES = \
|
|
||||||
mach-o-x86-64.c \
|
|
||||||
mmo.c \
|
|
||||||
pe-x86_64.c \
|
|
||||||
+ pei-aarch64.c \
|
|
||||||
pei-ia64.c \
|
|
||||||
pei-x86_64.c \
|
|
||||||
vms-alpha.c
|
|
||||||
@@ -666,7 +669,7 @@ BUILD_CFILES = \
|
|
||||||
elf32-aarch64.c elf64-aarch64.c \
|
|
||||||
elf32-ia64.c elf64-ia64.c \
|
|
||||||
elf32-riscv.c elf64-riscv.c \
|
|
||||||
- peigen.c pepigen.c pex64igen.c
|
|
||||||
+ peigen.c pepigen.c pex64igen.c pe-aarch64igen.c
|
|
||||||
|
|
||||||
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
|
|
||||||
|
|
||||||
@@ -862,6 +865,10 @@ pex64igen.c: peXXigen.c
|
|
||||||
echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
$(SED) -e s/XX/pex64/g < $< >> $@
|
|
||||||
|
|
||||||
+pe-aarch64igen.c: peXXigen.c
|
|
||||||
+ echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
+ $(SED) -e s/XX/peAArch64/g < $< >> $@
|
|
||||||
+
|
|
||||||
BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
|
|
||||||
LOCAL_H_DEPS= libbfd.h sysdep.h config.h
|
|
||||||
$(BFD32_LIBS) \
|
|
||||||
diff -rup binutils.orig/bfd/Makefile.in binutils-2.37/bfd/Makefile.in
|
|
||||||
--- binutils.orig/bfd/Makefile.in 2021-12-01 13:35:33.823078148 +0000
|
|
||||||
+++ binutils-2.37/bfd/Makefile.in 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -994,7 +994,9 @@ BFD64_BACKENDS = \
|
|
||||||
mach-o-aarch64.lo \
|
|
||||||
mach-o-x86-64.lo \
|
|
||||||
mmo.lo \
|
|
||||||
+ pe-aarch64igen.lo \
|
|
||||||
pe-x86_64.lo \
|
|
||||||
+ pei-aarch64.lo \
|
|
||||||
pei-ia64.lo \
|
|
||||||
pei-x86_64.lo \
|
|
||||||
pepigen.lo \
|
|
||||||
@@ -1034,6 +1036,7 @@ BFD64_BACKENDS_CFILES = \
|
|
||||||
mach-o-x86-64.c \
|
|
||||||
mmo.c \
|
|
||||||
pe-x86_64.c \
|
|
||||||
+ pei-aarch64.c \
|
|
||||||
pei-ia64.c \
|
|
||||||
pei-x86_64.c \
|
|
||||||
vms-alpha.c
|
|
||||||
@@ -1092,7 +1095,7 @@ BUILD_CFILES = \
|
|
||||||
elf32-aarch64.c elf64-aarch64.c \
|
|
||||||
elf32-ia64.c elf64-ia64.c \
|
|
||||||
elf32-riscv.c elf64-riscv.c \
|
|
||||||
- peigen.c pepigen.c pex64igen.c
|
|
||||||
+ peigen.c pepigen.c pex64igen.c pe-aarch64igen.c
|
|
||||||
|
|
||||||
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
|
|
||||||
SOURCE_HFILES = \
|
|
||||||
@@ -1551,9 +1554,11 @@ distclean-compile:
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mcore.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@
|
|
||||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-aarch64.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pepigen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pex64igen.Plo@am__quote@
|
|
||||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64igen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppcboot.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Plo@am__quote@
|
|
||||||
@@ -1991,6 +1996,11 @@ pepigen.c : peXXigen.c
|
|
||||||
pex64igen.c: peXXigen.c
|
|
||||||
echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
$(SED) -e s/XX/pex64/g < $< >> $@
|
|
||||||
+
|
|
||||||
+pe-aarch64igen.c: peXXigen.c
|
|
||||||
+ echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
+ $(SED) -e s/XX/peAArch64/g < $< >> $@
|
|
||||||
+
|
|
||||||
$(BFD32_LIBS) \
|
|
||||||
$(BFD64_LIBS) \
|
|
||||||
$(ALL_MACHINES) \
|
|
||||||
diff -rup binutils.orig/bfd/bfd.c binutils-2.37/bfd/bfd.c
|
|
||||||
--- binutils.orig/bfd/bfd.c 2021-12-01 13:35:33.821078167 +0000
|
|
||||||
+++ binutils-2.37/bfd/bfd.c 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -1735,6 +1735,7 @@ bfd_get_sign_extend_vma (bfd *abfd)
|
|
||||||
|| strcmp (name, "pei-i386") == 0
|
|
||||||
|| strcmp (name, "pe-x86-64") == 0
|
|
||||||
|| strcmp (name, "pei-x86-64") == 0
|
|
||||||
+ || strcmp (name, "pei-aarch64-little") == 0
|
|
||||||
|| strcmp (name, "pe-arm-wince-little") == 0
|
|
||||||
|| strcmp (name, "pei-arm-wince-little") == 0
|
|
||||||
|| strcmp (name, "aixcoff-rs6000") == 0
|
|
||||||
Only in binutils-2.37/bfd: coff-aarch64.c
|
|
||||||
diff -rup binutils.orig/bfd/coffcode.h binutils-2.37/bfd/coffcode.h
|
|
||||||
--- binutils.orig/bfd/coffcode.h 2021-12-01 13:35:33.822078158 +0000
|
|
||||||
+++ binutils-2.37/bfd/coffcode.h 2021-12-01 13:35:43.140988251 +0000
|
|
||||||
@@ -2215,6 +2215,12 @@ coff_set_arch_mach_hook (bfd *abfd, void
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+ case AARCH64MAGIC:
|
|
||||||
+ arch = bfd_arch_aarch64;
|
|
||||||
+ machine = internal_f->f_flags & F_AARCH64_ARCHITECTURE_MASK;
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
#ifdef Z80MAGIC
|
|
||||||
case Z80MAGIC:
|
|
||||||
arch = bfd_arch_z80;
|
|
||||||
@@ -2771,6 +2777,12 @@ coff_set_flags (bfd * abfd,
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+ case bfd_arch_aarch64:
|
|
||||||
+ * magicp = AARCH64MAGIC;
|
|
||||||
+ return true;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#ifdef ARMMAGIC
|
|
||||||
case bfd_arch_arm:
|
|
||||||
#ifdef ARM_WINCE
|
|
||||||
@@ -3866,7 +3878,7 @@ coff_write_object_contents (bfd * abfd)
|
|
||||||
internal_f.f_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#ifndef COFF_WITH_pex64
|
|
||||||
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
#ifdef COFF_WITH_PE
|
|
||||||
internal_f.f_flags |= IMAGE_FILE_32BIT_MACHINE;
|
|
||||||
#else
|
|
||||||
@@ -3914,6 +3926,11 @@ coff_write_object_contents (bfd * abfd)
|
|
||||||
#define __A_MAGIC_SET__
|
|
||||||
internal_a.magic = ZMAGIC;
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+#if defined(AARCH64)
|
|
||||||
+#define __A_MAGIC_SET__
|
|
||||||
+ internal_a.magic = ZMAGIC;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#if defined MCORE_PE
|
|
||||||
#define __A_MAGIC_SET__
|
|
||||||
diff -rup binutils.orig/bfd/config.bfd binutils-2.37/bfd/config.bfd
|
|
||||||
--- binutils.orig/bfd/config.bfd 2021-12-01 13:35:33.833078051 +0000
|
|
||||||
+++ binutils-2.37/bfd/config.bfd 2021-12-01 13:35:43.140988251 +0000
|
|
||||||
@@ -232,7 +232,7 @@ case "${targ}" in
|
|
||||||
;;
|
|
||||||
aarch64-*-elf | aarch64-*-rtems* | aarch64-*-genode*)
|
|
||||||
targ_defvec=aarch64_elf64_le_vec
|
|
||||||
- targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
|
||||||
+ targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec"
|
|
||||||
want64=true
|
|
||||||
;;
|
|
||||||
aarch64_be-*-elf)
|
|
||||||
@@ -257,7 +257,7 @@ case "${targ}" in
|
|
||||||
;;
|
|
||||||
aarch64-*-linux* | aarch64-*-netbsd*)
|
|
||||||
targ_defvec=aarch64_elf64_le_vec
|
|
||||||
- targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
|
||||||
+ targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec"
|
|
||||||
want64=true
|
|
||||||
;;
|
|
||||||
aarch64_be-*-linux* | aarch64_be-*-netbsd*)
|
|
||||||
diff -rup binutils.orig/bfd/configure binutils-2.37/bfd/configure
|
|
||||||
--- binutils.orig/bfd/configure 2021-12-01 13:35:33.817078206 +0000
|
|
||||||
+++ binutils-2.37/bfd/configure 2021-12-01 13:35:43.141988241 +0000
|
|
||||||
@@ -13283,6 +13283,7 @@ do
|
|
||||||
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
|
|
||||||
+ aarch64_pei_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
|
|
||||||
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
|
||||||
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
diff -rup binutils.orig/bfd/configure.ac binutils-2.37/bfd/configure.ac
|
|
||||||
--- binutils.orig/bfd/configure.ac 2021-12-01 13:35:33.829078090 +0000
|
|
||||||
+++ binutils-2.37/bfd/configure.ac 2021-12-01 13:35:43.141988241 +0000
|
|
||||||
@@ -439,6 +439,7 @@ do
|
|
||||||
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
|
|
||||||
+ aarch64_pei_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
|
|
||||||
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
|
||||||
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
diff -rup binutils.orig/bfd/libpei.h binutils-2.37/bfd/libpei.h
|
|
||||||
--- binutils.orig/bfd/libpei.h 2021-12-01 13:35:33.830078081 +0000
|
|
||||||
+++ binutils-2.37/bfd/libpei.h 2021-12-01 13:35:43.141988241 +0000
|
|
||||||
@@ -275,6 +275,41 @@
|
|
||||||
#define _bfd_XXi_write_codeview_record _bfd_pepi_write_codeview_record
|
|
||||||
#define _bfd_XXi_slurp_codeview_record _bfd_pepi_slurp_codeview_record
|
|
||||||
|
|
||||||
+#elif defined COFF_WITH_peAArch64
|
|
||||||
+
|
|
||||||
+#define GET_OPTHDR_IMAGE_BASE H_GET_64
|
|
||||||
+#define PUT_OPTHDR_IMAGE_BASE H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT H_PUT_64
|
|
||||||
+#define GET_PDATA_ENTRY bfd_get_32
|
|
||||||
+
|
|
||||||
+#define _bfd_XX_bfd_copy_private_bfd_data_common _bfd_peAArch64_bfd_copy_private_bfd_data_common
|
|
||||||
+#define _bfd_XX_bfd_copy_private_section_data _bfd_peAArch64_bfd_copy_private_section_data
|
|
||||||
+#define _bfd_XX_get_symbol_info _bfd_peAArch64_get_symbol_info
|
|
||||||
+#define _bfd_XX_only_swap_filehdr_out _bfd_peAArch64_only_swap_filehdr_out
|
|
||||||
+#define _bfd_XX_print_private_bfd_data_common _bfd_peAArch64_print_private_bfd_data_common
|
|
||||||
+#define _bfd_XXi_final_link_postscript _bfd_peAArch64i_final_link_postscript
|
|
||||||
+#define _bfd_XXi_only_swap_filehdr_out _bfd_peAArch64i_only_swap_filehdr_out
|
|
||||||
+#define _bfd_XXi_swap_aouthdr_in _bfd_peAArch64i_swap_aouthdr_in
|
|
||||||
+#define _bfd_XXi_swap_aouthdr_out _bfd_peAArch64i_swap_aouthdr_out
|
|
||||||
+#define _bfd_XXi_swap_aux_in _bfd_peAArch64i_swap_aux_in
|
|
||||||
+#define _bfd_XXi_swap_aux_out _bfd_peAArch64i_swap_aux_out
|
|
||||||
+#define _bfd_XXi_swap_lineno_in _bfd_peAArch64i_swap_lineno_in
|
|
||||||
+#define _bfd_XXi_swap_lineno_out _bfd_peAArch64i_swap_lineno_out
|
|
||||||
+#define _bfd_XXi_swap_scnhdr_out _bfd_peAArch64i_swap_scnhdr_out
|
|
||||||
+#define _bfd_XXi_swap_sym_in _bfd_peAArch64i_swap_sym_in
|
|
||||||
+#define _bfd_XXi_swap_sym_out _bfd_peAArch64i_swap_sym_out
|
|
||||||
+#define _bfd_XXi_swap_debugdir_in _bfd_peAArch64i_swap_debugdir_in
|
|
||||||
+#define _bfd_XXi_swap_debugdir_out _bfd_peAArch64i_swap_debugdir_out
|
|
||||||
+#define _bfd_XXi_write_codeview_record _bfd_peAArch64i_write_codeview_record
|
|
||||||
+#define _bfd_XXi_slurp_codeview_record _bfd_peAArch64i_slurp_codeview_record
|
|
||||||
+
|
|
||||||
#else /* !COFF_WITH_pep */
|
|
||||||
|
|
||||||
#define GET_OPTHDR_IMAGE_BASE H_GET_32
|
|
||||||
@@ -369,5 +404,6 @@ bool _bfd_XX_bfd_copy_private_section_da
|
|
||||||
bool _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
bool _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
bool _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
+bool _bfd_peAArch64_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
bool _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
|
|
||||||
diff -rup binutils.orig/bfd/peXXigen.c binutils-2.37/bfd/peXXigen.c
|
|
||||||
--- binutils.orig/bfd/peXXigen.c 2021-12-01 13:35:33.827078110 +0000
|
|
||||||
+++ binutils-2.37/bfd/peXXigen.c 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -60,8 +60,9 @@
|
|
||||||
on this code has a chance of getting something accomplished without
|
|
||||||
wasting too much time. */
|
|
||||||
|
|
||||||
-/* This expands into COFF_WITH_pe, COFF_WITH_pep, or COFF_WITH_pex64
|
|
||||||
- depending on whether we're compiling for straight PE or PE+. */
|
|
||||||
+/* This expands into COFF_WITH_pe, COFF_WITH_pep, COFF_WITH_pex64 or
|
|
||||||
+ COFF_WITH_peAArch64 depending on whether we're compiling for straight
|
|
||||||
+ PE or PE+. */
|
|
||||||
#define COFF_WITH_XX
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
|
||||||
@@ -83,6 +84,8 @@
|
|
||||||
# include "coff/x86_64.h"
|
|
||||||
#elif defined COFF_WITH_pep
|
|
||||||
# include "coff/ia64.h"
|
|
||||||
+#elif defined COFF_WITH_peAArch64
|
|
||||||
+# include "coff/aarch64.h"
|
|
||||||
#else
|
|
||||||
# include "coff/i386.h"
|
|
||||||
#endif
|
|
||||||
@@ -92,7 +95,7 @@
|
|
||||||
#include "libpei.h"
|
|
||||||
#include "safe-ctype.h"
|
|
||||||
|
|
||||||
-#if defined COFF_WITH_pep || defined COFF_WITH_pex64
|
|
||||||
+#if defined COFF_WITH_pep || defined COFF_WITH_pex64 || defined COFF_WITH_peAArch64
|
|
||||||
# undef AOUTSZ
|
|
||||||
# define AOUTSZ PEPAOUTSZ
|
|
||||||
# define PEAOUTHDR PEPAOUTHDR
|
|
||||||
@@ -469,7 +472,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
|
|
||||||
aouthdr_int->text_start =
|
|
||||||
GET_AOUTHDR_TEXT_START (abfd, aouthdr_ext->text_start);
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have data_start member! */
|
|
||||||
aouthdr_int->data_start =
|
|
||||||
GET_AOUTHDR_DATA_START (abfd, aouthdr_ext->data_start);
|
|
||||||
@@ -555,7 +558,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
|
|
||||||
if (aouthdr_int->entry)
|
|
||||||
{
|
|
||||||
aouthdr_int->entry += a->ImageBase;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_int->entry &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -563,12 +566,12 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
|
|
||||||
if (aouthdr_int->tsize)
|
|
||||||
{
|
|
||||||
aouthdr_int->text_start += a->ImageBase;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_int->text_start &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have data_start member! */
|
|
||||||
if (aouthdr_int->dsize)
|
|
||||||
{
|
|
||||||
@@ -628,7 +631,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
if (aouthdr_in->tsize)
|
|
||||||
{
|
|
||||||
aouthdr_in->text_start -= ib;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_in->text_start &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -636,7 +639,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
if (aouthdr_in->dsize)
|
|
||||||
{
|
|
||||||
aouthdr_in->data_start -= ib;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_in->data_start &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -644,7 +647,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
if (aouthdr_in->entry)
|
|
||||||
{
|
|
||||||
aouthdr_in->entry -= ib;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_in->entry &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -748,7 +751,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
|
|
||||||
aouthdr_out->standard.text_start);
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have data_start member! */
|
|
||||||
PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
|
|
||||||
aouthdr_out->standard.data_start);
|
|
||||||
@@ -1800,7 +1803,7 @@ pe_print_edata (bfd * abfd, void * vfile
|
|
||||||
static bool
|
|
||||||
pe_print_pdata (bfd * abfd, void * vfile)
|
|
||||||
{
|
|
||||||
-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
# define PDATA_ROW_SIZE (3 * 8)
|
|
||||||
#else
|
|
||||||
# define PDATA_ROW_SIZE (5 * 4)
|
|
||||||
@@ -1827,7 +1830,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
|
|
||||||
fprintf (file,
|
|
||||||
_("\nThe Function Table (interpreted .pdata section contents)\n"));
|
|
||||||
-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
fprintf (file,
|
|
||||||
_(" vma:\t\t\tBegin Address End Address Unwind Info\n"));
|
|
||||||
#else
|
|
||||||
@@ -1864,7 +1867,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
bfd_vma eh_handler;
|
|
||||||
bfd_vma eh_data;
|
|
||||||
bfd_vma prolog_end_addr;
|
|
||||||
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
int em_data;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1882,7 +1885,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
/* We are probably into the padding of the section now. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3);
|
|
||||||
#endif
|
|
||||||
eh_handler &= ~(bfd_vma) 0x3;
|
|
||||||
@@ -1893,7 +1896,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, end_addr); fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, eh_handler);
|
|
||||||
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, eh_data); fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, prolog_end_addr);
|
|
||||||
@@ -2784,7 +2787,7 @@ _bfd_XX_print_private_bfd_data_common (b
|
|
||||||
bfd_fprintf_vma (abfd, file, i->AddressOfEntryPoint);
|
|
||||||
fprintf (file, "\nBaseOfCode\t\t");
|
|
||||||
bfd_fprintf_vma (abfd, file, i->BaseOfCode);
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have BaseOfData member! */
|
|
||||||
fprintf (file, "\nBaseOfData\t\t");
|
|
||||||
bfd_fprintf_vma (abfd, file, i->BaseOfData);
|
|
||||||
@@ -3085,7 +3088,7 @@ _bfd_XX_get_symbol_info (bfd * abfd, asy
|
|
||||||
coff_get_symbol_info (abfd, symbol, ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64)
|
|
||||||
static int
|
|
||||||
sort_x64_pdata (const void *l, const void *r)
|
|
||||||
{
|
|
||||||
@@ -4504,7 +4507,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
|
|
||||||
the TLS data directory consists of 4 pointers, followed
|
|
||||||
by two 4-byte integer. This implies that the total size
|
|
||||||
is different for 32-bit and 64-bit executables. */
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x18;
|
|
||||||
#else
|
|
||||||
pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x28;
|
|
||||||
@@ -4513,7 +4516,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
|
|
||||||
|
|
||||||
/* If there is a .pdata section and we have linked pdata finally, we
|
|
||||||
need to sort the entries ascending. */
|
|
||||||
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64)
|
|
||||||
{
|
|
||||||
asection *sec = bfd_get_section_by_name (abfd, ".pdata");
|
|
||||||
|
|
||||||
Only in binutils-2.37/bfd: pei-aarch64.c
|
|
||||||
diff -rup binutils.orig/bfd/peicode.h binutils-2.37/bfd/peicode.h
|
|
||||||
--- binutils.orig/bfd/peicode.h 2021-12-01 13:35:33.829078090 +0000
|
|
||||||
+++ binutils-2.37/bfd/peicode.h 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -231,7 +231,7 @@ coff_swap_scnhdr_in (bfd * abfd, void *
|
|
||||||
{
|
|
||||||
scnhdr_int->s_vaddr += pe_data (abfd)->pe_opthdr.ImageBase;
|
|
||||||
/* Do not cut upper 32-bits for 64-bit vma. */
|
|
||||||
-#ifndef COFF_WITH_pex64
|
|
||||||
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
scnhdr_int->s_vaddr &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -738,6 +738,16 @@ static const jump_table jtab[] =
|
|
||||||
},
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+/* We don't currently support jumping to DLLs, so if
|
|
||||||
+ someone does try emit a runtime trap. Through UDF #0. */
|
|
||||||
+ { AARCH64MAGIC,
|
|
||||||
+ { 0x00, 0x00, 0x00, 0x00 },
|
|
||||||
+ 4, 0
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#ifdef ARMPEMAGIC
|
|
||||||
{ ARMPEMAGIC,
|
|
||||||
{ 0x00, 0xc0, 0x9f, 0xe5, 0x00, 0xf0,
|
|
||||||
@@ -910,7 +920,7 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
|
||||||
/* See PR 20907 for a reproducer. */
|
|
||||||
goto error_return;
|
|
||||||
|
|
||||||
-#ifdef COFF_WITH_pex64
|
|
||||||
+#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
((unsigned int *) id4->contents)[0] = ordinal;
|
|
||||||
((unsigned int *) id4->contents)[1] = 0x80000000;
|
|
||||||
((unsigned int *) id5->contents)[0] = ordinal;
|
|
||||||
@@ -1206,6 +1216,12 @@ pe_ILF_object_p (bfd * abfd)
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case IMAGE_FILE_MACHINE_ARM64:
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+ magic = AARCH64MAGIC;
|
|
||||||
+#endif
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
case IMAGE_FILE_MACHINE_THUMB:
|
|
||||||
#ifdef THUMBPEMAGIC
|
|
||||||
{
|
|
||||||
diff -rup binutils.orig/bfd/targets.c binutils-2.37/bfd/targets.c
|
|
||||||
--- binutils.orig/bfd/targets.c 2021-12-01 13:35:33.829078090 +0000
|
|
||||||
+++ binutils-2.37/bfd/targets.c 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -679,6 +679,7 @@ extern const bfd_target aarch64_elf64_be
|
|
||||||
extern const bfd_target aarch64_elf64_le_vec;
|
|
||||||
extern const bfd_target aarch64_elf64_le_cloudabi_vec;
|
|
||||||
extern const bfd_target aarch64_mach_o_vec;
|
|
||||||
+extern const bfd_target aarch64_pei_vec;
|
|
||||||
extern const bfd_target alpha_ecoff_le_vec;
|
|
||||||
extern const bfd_target alpha_elf64_vec;
|
|
||||||
extern const bfd_target alpha_elf64_fbsd_vec;
|
|
||||||
@@ -991,6 +992,7 @@ static const bfd_target * const _bfd_tar
|
|
||||||
&aarch64_elf64_le_vec,
|
|
||||||
&aarch64_elf64_le_cloudabi_vec,
|
|
||||||
&aarch64_mach_o_vec,
|
|
||||||
+ &aarch64_pei_vec,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BFD64
|
|
||||||
diff -rup binutils.orig/binutils/NEWS binutils-2.37/binutils/NEWS
|
|
||||||
--- binutils.orig/binutils/NEWS 2021-12-01 13:35:33.320083001 +0000
|
|
||||||
+++ binutils-2.37/binutils/NEWS 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -9,6 +9,9 @@
|
|
||||||
using --unicode=highlight will display them as unicode escape sequences
|
|
||||||
highlighted in red (if supported by the output device).
|
|
||||||
|
|
||||||
+* Support for efi-app-aarch64, efi-rtdrv-aarch64 and efi-bsdrv-aarch64 has been
|
|
||||||
+ added to objcopy in order to enable UEFI development using binutils.
|
|
||||||
+
|
|
||||||
Changes in 2.37:
|
|
||||||
|
|
||||||
* The readelf tool has a new command line option which can be used to specify
|
|
||||||
Only in binutils.orig/binutils: NEWS.orig
|
|
||||||
Only in binutils.orig/binutils: NEWS.rej
|
|
||||||
Only in binutils.orig/binutils: nm.c.orig
|
|
||||||
diff -rup binutils.orig/binutils/objcopy.c binutils-2.37/binutils/objcopy.c
|
|
||||||
--- binutils.orig/binutils/objcopy.c 2021-12-01 13:35:33.302083174 +0000
|
|
||||||
+++ binutils-2.37/binutils/objcopy.c 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -4987,6 +4987,13 @@ convert_efi_target (char *efi)
|
|
||||||
/* Change x86_64 to x86-64. */
|
|
||||||
efi[7] = '-';
|
|
||||||
}
|
|
||||||
+ else if (strcmp (efi + 4, "aarch64") == 0)
|
|
||||||
+ {
|
|
||||||
+ /* Change aarch64 to aarch64-little. */
|
|
||||||
+ efi = (char *) xrealloc (efi, strlen (efi) + 7);
|
|
||||||
+ char *t = "aarch64-little";
|
|
||||||
+ strcpy (efi + 4, t);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate and return a pointer to a struct section_add, initializing the
|
|
||||||
Only in binutils.orig/binutils: objdump.c.orig
|
|
||||||
Only in binutils.orig/binutils: objdump.c.rej
|
|
||||||
Only in binutils.orig/binutils: readelf.c.orig
|
|
||||||
Only in binutils-2.37/binutils/testsuite/binutils-all/aarch64: pei-aarch64-little.d
|
|
||||||
Only in binutils-2.37/binutils/testsuite/binutils-all/aarch64: pei-aarch64-little.s
|
|
||||||
Only in binutils-2.37/include/coff: aarch64.h
|
|
||||||
diff -rup binutils.orig/include/coff/pe.h binutils-2.37/include/coff/pe.h
|
|
||||||
--- binutils.orig/include/coff/pe.h 2021-12-01 13:35:33.251083666 +0000
|
|
||||||
+++ binutils-2.37/include/coff/pe.h 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -137,6 +137,7 @@
|
|
||||||
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
|
||||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
|
||||||
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
|
||||||
+#define IMAGE_FILE_MACHINE_ARM64 0xaa64
|
|
||||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
|
||||||
#define IMAGE_FILE_MACHINE_CEE 0xc0ee
|
|
||||||
#define IMAGE_FILE_MACHINE_CEF 0x0cef
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/include/coff/aarch64.h 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -0,0 +1,63 @@
|
|
||||||
+/* AArch64 COFF support for BFD.
|
|
||||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program; if not, write to the Free Software Foundation,
|
|
||||||
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
+
|
|
||||||
+#define COFFAARCH64 1
|
|
||||||
+
|
|
||||||
+#define L_LNNO_SIZE 2
|
|
||||||
+#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
|
||||||
+#include "coff/external.h"
|
|
||||||
+
|
|
||||||
+#define F_AARCH64_ARCHITECTURE_MASK (0x4000)
|
|
||||||
+
|
|
||||||
+#define AARCH64MAGIC 0xaa64 /* From Microsoft specification. */
|
|
||||||
+
|
|
||||||
+#undef BADMAG
|
|
||||||
+#define BADMAG(x) ((x).f_magic != AARCH64MAGIC)
|
|
||||||
+#define AARCH64 1 /* Customize coffcode.h. */
|
|
||||||
+
|
|
||||||
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
|
|
||||||
+
|
|
||||||
+#define OMAGIC 0404 /* Object files, eg as output. */
|
|
||||||
+#define ZMAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Demand load format, eg normal ld output 0x10b. */
|
|
||||||
+#define STMAGIC 0401 /* Target shlib. */
|
|
||||||
+#define SHMAGIC 0443 /* Host shlib. */
|
|
||||||
+
|
|
||||||
+/* define some NT default values */
|
|
||||||
+/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
|
||||||
+#define NT_SECTION_ALIGNMENT 0x1000
|
|
||||||
+#define NT_FILE_ALIGNMENT 0x200
|
|
||||||
+#define NT_DEF_RESERVE 0x100000
|
|
||||||
+#define NT_DEF_COMMIT 0x1000
|
|
||||||
+
|
|
||||||
+/* We use the .rdata section to hold read only data. */
|
|
||||||
+#define _LIT ".rdata"
|
|
||||||
+
|
|
||||||
+/********************** RELOCATION DIRECTIVES **********************/
|
|
||||||
+struct external_reloc
|
|
||||||
+{
|
|
||||||
+ char r_vaddr[4];
|
|
||||||
+ char r_symndx[4];
|
|
||||||
+ char r_type[2];
|
|
||||||
+ char r_offset[4];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define RELOC struct external_reloc
|
|
||||||
+#define RELSZ 14
|
|
||||||
+
|
|
||||||
+#define ARM_NOTE_SECTION ".note"
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/bfd/coff-aarch64.c 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -0,0 +1,166 @@
|
|
||||||
+/* BFD back-end for AArch64 COFF files.
|
|
||||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program; if not, write to the Free Software
|
|
||||||
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
+ MA 02110-1301, USA. */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+#ifndef COFF_WITH_peAArch64
|
|
||||||
+#define COFF_WITH_peAArch64
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Note we have to make sure not to include headers twice.
|
|
||||||
+ Not all headers are wrapped in #ifdef guards, so we define
|
|
||||||
+ PEI_HEADERS to prevent double including here. */
|
|
||||||
+#ifndef PEI_HEADERS
|
|
||||||
+#include "sysdep.h"
|
|
||||||
+#include "bfd.h"
|
|
||||||
+#include "libbfd.h"
|
|
||||||
+#include "coff/aarch64.h"
|
|
||||||
+#include "coff/internal.h"
|
|
||||||
+#include "coff/pe.h"
|
|
||||||
+#include "libcoff.h"
|
|
||||||
+#include "libiberty.h"
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#include "libcoff.h"
|
|
||||||
+
|
|
||||||
+/* The page size is a guess based on ELF. */
|
|
||||||
+
|
|
||||||
+#define COFF_PAGE_SIZE 0x1000
|
|
||||||
+
|
|
||||||
+/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */
|
|
||||||
+#define OCTETS_PER_BYTE(ABFD, SEC) 1
|
|
||||||
+
|
|
||||||
+#ifndef PCRELOFFSET
|
|
||||||
+#define PCRELOFFSET true
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Currently we don't handle any relocations. */
|
|
||||||
+static reloc_howto_type pe_aarch64_std_reloc_howto[] =
|
|
||||||
+ {
|
|
||||||
+
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 2
|
|
||||||
+#define COFF_PAGE_SIZE 0x1000
|
|
||||||
+
|
|
||||||
+#ifndef NUM_ELEM
|
|
||||||
+#define NUM_ELEM(a) ((sizeof (a)) / sizeof ((a)[0]))
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#define NUM_RELOCS NUM_ELEM (pe_aarch64_std_reloc_howto)
|
|
||||||
+
|
|
||||||
+#define RTYPE2HOWTO(cache_ptr, dst) \
|
|
||||||
+ (cache_ptr)->howto = NULL
|
|
||||||
+
|
|
||||||
+#ifndef bfd_pe_print_pdata
|
|
||||||
+#define bfd_pe_print_pdata NULL
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Return TRUE if this relocation should
|
|
||||||
+ appear in the output .reloc section. */
|
|
||||||
+
|
|
||||||
+static bool
|
|
||||||
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
|
|
||||||
+ reloc_howto_type * howto)
|
|
||||||
+{
|
|
||||||
+ return !howto->pc_relative;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#include "coffcode.h"
|
|
||||||
+
|
|
||||||
+/* Target vectors. */
|
|
||||||
+const bfd_target
|
|
||||||
+#ifdef TARGET_SYM
|
|
||||||
+ TARGET_SYM =
|
|
||||||
+#else
|
|
||||||
+ aarch64_pei_vec =
|
|
||||||
+#endif
|
|
||||||
+{
|
|
||||||
+#ifdef TARGET_NAME
|
|
||||||
+ TARGET_NAME,
|
|
||||||
+#else
|
|
||||||
+ "pei-aarch64-little", /* Name. */
|
|
||||||
+#endif
|
|
||||||
+ bfd_target_coff_flavour,
|
|
||||||
+ BFD_ENDIAN_LITTLE, /* Data byte order is little. */
|
|
||||||
+ BFD_ENDIAN_LITTLE, /* Header byte order is little. */
|
|
||||||
+
|
|
||||||
+ (HAS_RELOC | EXEC_P /* Object flags. */
|
|
||||||
+ | HAS_LINENO | HAS_DEBUG
|
|
||||||
+ | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
|
|
||||||
+
|
|
||||||
+ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */
|
|
||||||
+#if defined(COFF_WITH_PE)
|
|
||||||
+ | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
|
|
||||||
+#endif
|
|
||||||
+ | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
|
|
||||||
+
|
|
||||||
+#ifdef TARGET_UNDERSCORE
|
|
||||||
+ TARGET_UNDERSCORE, /* Leading underscore. */
|
|
||||||
+#else
|
|
||||||
+ 0, /* Leading underscore. */
|
|
||||||
+#endif
|
|
||||||
+ '/', /* Ar_pad_char. */
|
|
||||||
+ 15, /* Ar_max_namelen. */
|
|
||||||
+ 0, /* match priority. */
|
|
||||||
+ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
|
|
||||||
+
|
|
||||||
+ /* Data conversion functions. */
|
|
||||||
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
|
||||||
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
|
||||||
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */
|
|
||||||
+ /* Header conversion functions. */
|
|
||||||
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
|
||||||
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
|
||||||
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */
|
|
||||||
+
|
|
||||||
+ /* Note that we allow an object file to be treated as a core file as well. */
|
|
||||||
+ { /* bfd_check_format. */
|
|
||||||
+ _bfd_dummy_target,
|
|
||||||
+ coff_object_p,
|
|
||||||
+ bfd_generic_archive_p,
|
|
||||||
+ coff_object_p
|
|
||||||
+ },
|
|
||||||
+ { /* bfd_set_format. */
|
|
||||||
+ _bfd_bool_bfd_false_error,
|
|
||||||
+ coff_mkobject,
|
|
||||||
+ _bfd_generic_mkarchive,
|
|
||||||
+ _bfd_bool_bfd_false_error
|
|
||||||
+ },
|
|
||||||
+ { /* bfd_write_contents. */
|
|
||||||
+ _bfd_bool_bfd_false_error,
|
|
||||||
+ coff_write_object_contents,
|
|
||||||
+ _bfd_write_archive_contents,
|
|
||||||
+ _bfd_bool_bfd_false_error
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ BFD_JUMP_TABLE_GENERIC (coff),
|
|
||||||
+ BFD_JUMP_TABLE_COPY (coff),
|
|
||||||
+ BFD_JUMP_TABLE_CORE (_bfd_nocore),
|
|
||||||
+ BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
|
|
||||||
+ BFD_JUMP_TABLE_SYMBOLS (coff),
|
|
||||||
+ BFD_JUMP_TABLE_RELOCS (coff),
|
|
||||||
+ BFD_JUMP_TABLE_WRITE (coff),
|
|
||||||
+ BFD_JUMP_TABLE_LINK (coff),
|
|
||||||
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
|
|
||||||
+
|
|
||||||
+ NULL,
|
|
||||||
+
|
|
||||||
+ COFF_SWAP_TABLE
|
|
||||||
+};
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/binutils/testsuite/binutils-all/aarch64/pei-aarch64-little.s 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -0,0 +1,42 @@
|
|
||||||
+ .arch armv8-a
|
|
||||||
+ .text
|
|
||||||
+ .align 2
|
|
||||||
+ .global foo
|
|
||||||
+ .type foo, %function
|
|
||||||
+foo:
|
|
||||||
+.LFB0:
|
|
||||||
+ .cfi_startproc
|
|
||||||
+ sub sp, sp, #16
|
|
||||||
+ .cfi_def_cfa_offset 16
|
|
||||||
+ str w0, [sp, 12]
|
|
||||||
+ ldr w0, [sp, 12]
|
|
||||||
+ mul w0, w0, w0
|
|
||||||
+ add sp, sp, 16
|
|
||||||
+ .cfi_def_cfa_offset 0
|
|
||||||
+ ret
|
|
||||||
+ .cfi_endproc
|
|
||||||
+.LFE0:
|
|
||||||
+ .size foo, .-foo
|
|
||||||
+ .align 2
|
|
||||||
+ .global main
|
|
||||||
+ .type main, %function
|
|
||||||
+main:
|
|
||||||
+.LFB1:
|
|
||||||
+ .cfi_startproc
|
|
||||||
+ stp x29, x30, [sp, -16]!
|
|
||||||
+ .cfi_def_cfa_offset 16
|
|
||||||
+ .cfi_offset 29, -16
|
|
||||||
+ .cfi_offset 30, -8
|
|
||||||
+ mov x29, sp
|
|
||||||
+ mov w0, 5
|
|
||||||
+ bl foo
|
|
||||||
+ ldp x29, x30, [sp], 16
|
|
||||||
+ .cfi_restore 30
|
|
||||||
+ .cfi_restore 29
|
|
||||||
+ .cfi_def_cfa_offset 0
|
|
||||||
+ ret
|
|
||||||
+ .cfi_endproc
|
|
||||||
+.LFE1:
|
|
||||||
+ .size main, .-main
|
|
||||||
+ .ident "GCC: (fsf-trunk.2870) 12.0.0 20210930 (experimental)"
|
|
||||||
+ .section .note.GNU-stack,"",@progbits
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/binutils/testsuite/binutils-all/aarch64/pei-aarch64-little.d 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -0,0 +1,16 @@
|
|
||||||
+#skip: aarch64_be-*-*
|
|
||||||
+#ld: -e0
|
|
||||||
+#PROG: objcopy
|
|
||||||
+#objcopy: -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* -j .reloc --target=efi-app-aarch64
|
|
||||||
+#objdump: -h -f
|
|
||||||
+#name: Check if efi app format is recognized
|
|
||||||
+
|
|
||||||
+.*: file format pei-aarch64-little
|
|
||||||
+architecture: aarch64, flags 0x00000132:
|
|
||||||
+EXEC_P, HAS_SYMS, HAS_LOCALS, D_PAGED
|
|
||||||
+start address 0x0000000000000000
|
|
||||||
+
|
|
||||||
+Sections:
|
|
||||||
+Idx Name Size VMA LMA File off Algn
|
|
||||||
+ 0 \.text 00000030 0[^ ]+ 0[^ ]+ 0[^ ]+ 2\*\*2
|
|
||||||
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
|
|
||||||
--- /dev/null 2021-11-30 07:48:35.901044247 +0000
|
|
||||||
+++ binutils-2.35.2/bfd/pei-aarch64.c 2021-11-30 13:38:37.255656936 +0000
|
|
||||||
@@ -0,0 +1,75 @@
|
|
||||||
+/* BFD back-end for AArch64 PE IMAGE COFF files.
|
|
||||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program; if not, write to the Free Software
|
|
||||||
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
+ MA 02110-1301, USA. */
|
|
||||||
+
|
|
||||||
+#include "sysdep.h"
|
|
||||||
+#include "bfd.h"
|
|
||||||
+
|
|
||||||
+#define TARGET_SYM aarch64_pei_vec
|
|
||||||
+#define TARGET_NAME "pei-aarch64-little"
|
|
||||||
+#define TARGET_ARCHITECTURE bfd_arch_aarch64
|
|
||||||
+#define TARGET_PAGESIZE 4096
|
|
||||||
+#define TARGET_BIG_ENDIAN 0
|
|
||||||
+#define TARGET_ARCHIVE 0
|
|
||||||
+#define TARGET_PRIORITY 0
|
|
||||||
+
|
|
||||||
+#define COFF_IMAGE_WITH_PE
|
|
||||||
+/* Rename the above into.. */
|
|
||||||
+#define COFF_WITH_peAArch64
|
|
||||||
+#define COFF_WITH_PE
|
|
||||||
+#define PCRELOFFSET true
|
|
||||||
+
|
|
||||||
+/* Long section names not allowed in executable images, only object files. */
|
|
||||||
+#define COFF_LONG_SECTION_NAMES 0
|
|
||||||
+
|
|
||||||
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
|
|
||||||
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
|
|
||||||
+
|
|
||||||
+#define PEI_HEADERS
|
|
||||||
+#include "sysdep.h"
|
|
||||||
+#include "bfd.h"
|
|
||||||
+#include "libbfd.h"
|
|
||||||
+#include "coff/aarch64.h"
|
|
||||||
+#include "coff/internal.h"
|
|
||||||
+#include "coff/pe.h"
|
|
||||||
+#include "libcoff.h"
|
|
||||||
+#include "libpei.h"
|
|
||||||
+#include "libiberty.h"
|
|
||||||
+
|
|
||||||
+/* Make sure we're setting a 64-bit format. */
|
|
||||||
+#undef AOUTSZ
|
|
||||||
+#define AOUTSZ PEPAOUTSZ
|
|
||||||
+#define PEAOUTHDR PEPAOUTHDR
|
|
||||||
+
|
|
||||||
+#include "coff-aarch64.c"
|
|
@ -1,230 +0,0 @@
|
|||||||
--- binutils.orig/binutils/stabs.c 2021-12-20 12:51:40.953113439 +0000
|
|
||||||
+++ binutils-2.37/binutils/stabs.c 2021-12-20 12:56:07.607348945 +0000
|
|
||||||
@@ -202,7 +202,7 @@ static debug_type stab_find_type (void *
|
|
||||||
static bool stab_record_type
|
|
||||||
(void *, struct stab_handle *, const int *, debug_type);
|
|
||||||
static debug_type stab_xcoff_builtin_type
|
|
||||||
- (void *, struct stab_handle *, int);
|
|
||||||
+ (void *, struct stab_handle *, unsigned int);
|
|
||||||
static debug_type stab_find_tagged_type
|
|
||||||
(void *, struct stab_handle *, const char *, int, enum debug_type_kind);
|
|
||||||
static debug_type *stab_demangle_argtypes
|
|
||||||
@@ -3496,166 +3496,167 @@ stab_record_type (void *dhandle ATTRIBUT
|
|
||||||
|
|
||||||
static debug_type
|
|
||||||
stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
|
|
||||||
- int typenum)
|
|
||||||
+ unsigned int typenum)
|
|
||||||
{
|
|
||||||
debug_type rettype;
|
|
||||||
const char *name;
|
|
||||||
|
|
||||||
- if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
|
|
||||||
+ typenum = -typenum - 1;
|
|
||||||
+ if (typenum >= XCOFF_TYPE_COUNT)
|
|
||||||
{
|
|
||||||
- fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
|
|
||||||
+ fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1);
|
|
||||||
return DEBUG_TYPE_NULL;
|
|
||||||
}
|
|
||||||
- if (info->xcoff_types[-typenum] != NULL)
|
|
||||||
- return info->xcoff_types[-typenum];
|
|
||||||
+ if (info->xcoff_types[typenum] != NULL)
|
|
||||||
+ return info->xcoff_types[typenum];
|
|
||||||
|
|
||||||
- switch (-typenum)
|
|
||||||
+ switch (typenum)
|
|
||||||
{
|
|
||||||
- case 1:
|
|
||||||
+ case 0:
|
|
||||||
/* The size of this and all the other types are fixed, defined
|
|
||||||
by the debugging format. */
|
|
||||||
name = "int";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 2:
|
|
||||||
+ case 1:
|
|
||||||
name = "char";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, false);
|
|
||||||
break;
|
|
||||||
- case 3:
|
|
||||||
+ case 2:
|
|
||||||
name = "short";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, false);
|
|
||||||
break;
|
|
||||||
- case 4:
|
|
||||||
+ case 3:
|
|
||||||
name = "long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 5:
|
|
||||||
+ case 4:
|
|
||||||
name = "unsigned char";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, true);
|
|
||||||
break;
|
|
||||||
- case 6:
|
|
||||||
+ case 5:
|
|
||||||
name = "signed char";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, false);
|
|
||||||
break;
|
|
||||||
- case 7:
|
|
||||||
+ case 6:
|
|
||||||
name = "unsigned short";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, true);
|
|
||||||
break;
|
|
||||||
- case 8:
|
|
||||||
+ case 7:
|
|
||||||
name = "unsigned int";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, true);
|
|
||||||
break;
|
|
||||||
- case 9:
|
|
||||||
+ case 8:
|
|
||||||
name = "unsigned";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, true);
|
|
||||||
break;
|
|
||||||
- case 10:
|
|
||||||
+ case 9:
|
|
||||||
name = "unsigned long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, true);
|
|
||||||
break;
|
|
||||||
- case 11:
|
|
||||||
+ case 10:
|
|
||||||
name = "void";
|
|
||||||
rettype = debug_make_void_type (dhandle);
|
|
||||||
break;
|
|
||||||
- case 12:
|
|
||||||
+ case 11:
|
|
||||||
/* IEEE single precision (32 bit). */
|
|
||||||
name = "float";
|
|
||||||
rettype = debug_make_float_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 13:
|
|
||||||
+ case 12:
|
|
||||||
/* IEEE double precision (64 bit). */
|
|
||||||
name = "double";
|
|
||||||
rettype = debug_make_float_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 14:
|
|
||||||
+ case 13:
|
|
||||||
/* This is an IEEE double on the RS/6000, and different machines
|
|
||||||
with different sizes for "long double" should use different
|
|
||||||
negative type numbers. See stabs.texinfo. */
|
|
||||||
name = "long double";
|
|
||||||
rettype = debug_make_float_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 15:
|
|
||||||
+ case 14:
|
|
||||||
name = "integer";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 16:
|
|
||||||
+ case 15:
|
|
||||||
name = "boolean";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 17:
|
|
||||||
+ case 16:
|
|
||||||
name = "short real";
|
|
||||||
rettype = debug_make_float_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 18:
|
|
||||||
+ case 17:
|
|
||||||
name = "real";
|
|
||||||
rettype = debug_make_float_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 19:
|
|
||||||
+ case 18:
|
|
||||||
/* FIXME */
|
|
||||||
name = "stringptr";
|
|
||||||
rettype = NULL;
|
|
||||||
break;
|
|
||||||
- case 20:
|
|
||||||
+ case 19:
|
|
||||||
/* FIXME */
|
|
||||||
name = "character";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, true);
|
|
||||||
break;
|
|
||||||
- case 21:
|
|
||||||
+ case 20:
|
|
||||||
name = "logical*1";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 1);
|
|
||||||
break;
|
|
||||||
- case 22:
|
|
||||||
+ case 21:
|
|
||||||
name = "logical*2";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 2);
|
|
||||||
break;
|
|
||||||
- case 23:
|
|
||||||
+ case 22:
|
|
||||||
name = "logical*4";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 24:
|
|
||||||
+ case 23:
|
|
||||||
name = "logical";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 25:
|
|
||||||
+ case 24:
|
|
||||||
/* Complex type consisting of two IEEE single precision values. */
|
|
||||||
name = "complex";
|
|
||||||
rettype = debug_make_complex_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 26:
|
|
||||||
+ case 25:
|
|
||||||
/* Complex type consisting of two IEEE double precision values. */
|
|
||||||
name = "double complex";
|
|
||||||
rettype = debug_make_complex_type (dhandle, 16);
|
|
||||||
break;
|
|
||||||
- case 27:
|
|
||||||
+ case 26:
|
|
||||||
name = "integer*1";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, false);
|
|
||||||
break;
|
|
||||||
- case 28:
|
|
||||||
+ case 27:
|
|
||||||
name = "integer*2";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, false);
|
|
||||||
break;
|
|
||||||
- case 29:
|
|
||||||
+ case 28:
|
|
||||||
name = "integer*4";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 30:
|
|
||||||
+ case 29:
|
|
||||||
/* FIXME */
|
|
||||||
name = "wchar";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, false);
|
|
||||||
break;
|
|
||||||
- case 31:
|
|
||||||
+ case 30:
|
|
||||||
name = "long long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 8, false);
|
|
||||||
break;
|
|
||||||
- case 32:
|
|
||||||
+ case 31:
|
|
||||||
name = "unsigned long long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 8, true);
|
|
||||||
break;
|
|
||||||
- case 33:
|
|
||||||
+ case 32:
|
|
||||||
name = "logical*8";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 34:
|
|
||||||
+ case 33:
|
|
||||||
name = "integer*8";
|
|
||||||
rettype = debug_make_int_type (dhandle, 8, false);
|
|
||||||
break;
|
|
||||||
@@ -3664,9 +3665,7 @@ stab_xcoff_builtin_type (void *dhandle,
|
|
||||||
}
|
|
||||||
|
|
||||||
rettype = debug_name_type (dhandle, name, rettype);
|
|
||||||
-
|
|
||||||
- info->xcoff_types[-typenum] = rettype;
|
|
||||||
-
|
|
||||||
+ info->xcoff_types[typenum] = rettype;
|
|
||||||
return rettype;
|
|
||||||
}
|
|
||||||
|
|
@ -1,232 +0,0 @@
|
|||||||
From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Mon, 26 Jul 2021 05:59:55 -0700
|
|
||||||
Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd
|
|
||||||
|
|
||||||
Close the file descriptor if there is no archive plugin file descriptor
|
|
||||||
to avoid running out of file descriptors on thin archives with many
|
|
||||||
archive members.
|
|
||||||
|
|
||||||
bfd/
|
|
||||||
|
|
||||||
PR ld/28138
|
|
||||||
* plugin.c (bfd_plugin_close_file_descriptor): Close the file
|
|
||||||
descriptor there is no archive plugin file descriptor.
|
|
||||||
|
|
||||||
ld/
|
|
||||||
|
|
||||||
PR ld/28138
|
|
||||||
* testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for
|
|
||||||
native build.
|
|
||||||
|
|
||||||
PR ld/28138
|
|
||||||
* testsuite/ld-plugin/lto.exp: Run ld/28138 tests.
|
|
||||||
* testsuite/ld-plugin/pr28138.c: New file.
|
|
||||||
* testsuite/ld-plugin/pr28138-1.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-2.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-3.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-4.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-5.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-6.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-7.c: Likewise.
|
|
||||||
|
|
||||||
(cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742)
|
|
||||||
(cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2)
|
|
||||||
---
|
|
||||||
bfd/plugin.c | 8 +++++++
|
|
||||||
ld/testsuite/ld-plugin/lto.exp | 34 ++++++++++++++++++++++++++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-1.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-2.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-3.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-4.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-5.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-6.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-7.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138.c | 20 ++++++++++++++++++
|
|
||||||
10 files changed, 104 insertions(+)
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138.c
|
|
||||||
|
|
||||||
diff --git a/bfd/plugin.c b/bfd/plugin.c
|
|
||||||
index 6cfa2b66470..3bab8febe88 100644
|
|
||||||
--- a/bfd/plugin.c
|
|
||||||
+++ b/bfd/plugin.c
|
|
||||||
@@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd)
|
|
||||||
&& !bfd_is_thin_archive (abfd->my_archive))
|
|
||||||
abfd = abfd->my_archive;
|
|
||||||
|
|
||||||
+ /* Close the file descriptor if there is no archive plugin file
|
|
||||||
+ descriptor. */
|
|
||||||
+ if (abfd->archive_plugin_fd == -1)
|
|
||||||
+ {
|
|
||||||
+ close (fd);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
abfd->archive_plugin_fd_open_count--;
|
|
||||||
/* Dup the archive plugin file descriptor for later use, which
|
|
||||||
will be closed by _bfd_archive_close_and_cleanup. */
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
|
|
||||||
index def69e43ab3..999d911ce6a 100644
|
|
||||||
--- a/ld/testsuite/ld-plugin/lto.exp
|
|
||||||
+++ b/ld/testsuite/ld-plugin/lto.exp
|
|
||||||
@@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+run_cc_link_tests [list \
|
|
||||||
+ [list \
|
|
||||||
+ "Build pr28138.a" \
|
|
||||||
+ "-T" "" \
|
|
||||||
+ {pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \
|
|
||||||
+ pr28138-6.c pr28138-7.c} {} "pr28138.a" \
|
|
||||||
+ ] \
|
|
||||||
+ [list \
|
|
||||||
+ "Build pr28138.o" \
|
|
||||||
+ "" "" \
|
|
||||||
+ {pr28138.c} {} \
|
|
||||||
+ ] \
|
|
||||||
+]
|
|
||||||
+
|
|
||||||
+set exec_output [run_host_cmd "sh" \
|
|
||||||
+ "-c \"ulimit -n 20; \
|
|
||||||
+ $CC -Btmpdir/ld -o tmpdir/pr28138 \
|
|
||||||
+ tmpdir/pr28138.o tmpdir/pr28138.a\""]
|
|
||||||
+set exec_output [prune_warnings $exec_output]
|
|
||||||
+if [string match "" $exec_output] then {
|
|
||||||
+ if { [isnative] } {
|
|
||||||
+ set exec_output [run_host_cmd "tmpdir/pr28138" ""]
|
|
||||||
+ if [string match "PASS" $exec_output] then {
|
|
||||||
+ pass "PR ld/28138"
|
|
||||||
+ } else {
|
|
||||||
+ fail "PR ld/28138"
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ pass "PR ld/28138"
|
|
||||||
+ }
|
|
||||||
+} else {
|
|
||||||
+ fail "PR ld/28138"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
set testname "Build liblto-11.a"
|
|
||||||
remote_file host delete "tmpdir/liblto-11.a"
|
|
||||||
set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..51d119e1642
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-1.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a0(void);
|
|
||||||
+int
|
|
||||||
+a1(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a0();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..1120cd797e9
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-2.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a1(void);
|
|
||||||
+int
|
|
||||||
+a2(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a1();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..ec464947ee6
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-3.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a2(void);
|
|
||||||
+int
|
|
||||||
+a3(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a2();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..475701b2c5c
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-4.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a3(void);
|
|
||||||
+int
|
|
||||||
+a4(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a3();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..e24f86c363e
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-5.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a4(void);
|
|
||||||
+int
|
|
||||||
+a5(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a4();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..b5b938bdb21
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-6.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a5(void);
|
|
||||||
+int
|
|
||||||
+a6(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a5();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..4ef75bf0f0c
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-7.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a6(void);
|
|
||||||
+int
|
|
||||||
+a7(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a6();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..68252c9f382
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138.c
|
|
||||||
@@ -0,0 +1,20 @@
|
|
||||||
+#include <stdio.h>
|
|
||||||
+
|
|
||||||
+extern int a7(void);
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+a0(void)
|
|
||||||
+{
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main()
|
|
||||||
+{
|
|
||||||
+ if (a7() == 7)
|
|
||||||
+ {
|
|
||||||
+ printf ("PASS\n");
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
@ -1,201 +0,0 @@
|
|||||||
diff -rup binutils.orig/gas/dwarf2dbg.c binutils-2.37/gas/dwarf2dbg.c
|
|
||||||
--- binutils.orig/gas/dwarf2dbg.c 2021-08-09 17:28:17.743318315 +0100
|
|
||||||
+++ binutils-2.37/gas/dwarf2dbg.c 2021-08-09 17:28:27.043264112 +0100
|
|
||||||
@@ -620,7 +620,22 @@ get_directory_table_entry (const char *d
|
|
||||||
if (can_use_zero)
|
|
||||||
{
|
|
||||||
if (dirs == NULL || dirs[0] == NULL)
|
|
||||||
- d = 0;
|
|
||||||
+ {
|
|
||||||
+ const char * pwd = getpwd ();
|
|
||||||
+
|
|
||||||
+ if (dwarf_level >= 5 && strcmp (dirname, pwd) != 0)
|
|
||||||
+ {
|
|
||||||
+ /* In DWARF-5 the 0 entry in the directory table is expected to be
|
|
||||||
+ the same as the DW_AT_comp_dir (which is set to the current build
|
|
||||||
+ directory). Since we are about to create a directory entry that
|
|
||||||
+ is not the same, allocate the current directory first.
|
|
||||||
+ FIXME: Alternatively we could generate an error message here. */
|
|
||||||
+ (void) get_directory_table_entry (pwd, strlen (pwd), true);
|
|
||||||
+ d = 1;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ d = 0;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
else if (d == 0)
|
|
||||||
d = 1;
|
|
||||||
@@ -628,8 +643,8 @@ get_directory_table_entry (const char *d
|
|
||||||
if (d >= dirs_allocated)
|
|
||||||
{
|
|
||||||
unsigned int old = dirs_allocated;
|
|
||||||
-
|
|
||||||
- dirs_allocated = d + 32;
|
|
||||||
+#define DIR_TABLE_INCREMENT 32
|
|
||||||
+ dirs_allocated = d + DIR_TABLE_INCREMENT;
|
|
||||||
dirs = XRESIZEVEC (char *, dirs, dirs_allocated);
|
|
||||||
memset (dirs + old, 0, (dirs_allocated - old) * sizeof (char *));
|
|
||||||
}
|
|
||||||
@@ -779,7 +794,7 @@ allocate_filename_to_slot (const char *d
|
|
||||||
{
|
|
||||||
if (dirs == NULL)
|
|
||||||
{
|
|
||||||
- dirs_allocated = files[num].dir + 32;
|
|
||||||
+ dirs_allocated = files[num].dir + DIR_TABLE_INCREMENT;
|
|
||||||
dirs = XCNEWVEC (char *, dirs_allocated);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -807,7 +822,7 @@ allocate_filename_to_slot (const char *d
|
|
||||||
{
|
|
||||||
if (dirs == NULL)
|
|
||||||
{
|
|
||||||
- dirs_allocated = files[num].dir + 32;
|
|
||||||
+ dirs_allocated = files[num].dir + DIR_TABLE_INCREMENT;
|
|
||||||
dirs = XCNEWVEC (char *, dirs_allocated);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -840,7 +855,7 @@ allocate_filename_to_slot (const char *d
|
|
||||||
dirlen = strlen (dirname);
|
|
||||||
file = filename;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+
|
|
||||||
d = get_directory_table_entry (dirname, dirlen, num == 0);
|
|
||||||
i = num;
|
|
||||||
|
|
||||||
@@ -2082,7 +2097,12 @@ out_dir_and_file_list (segT line_seg, in
|
|
||||||
Otherwise use pwd as main file directory. */
|
|
||||||
if (dirs_in_use > 0 && dirs != NULL && dirs[0] != NULL)
|
|
||||||
dir = remap_debug_filename (dirs[0]);
|
|
||||||
- else if (dirs_in_use > 1 && dirs != NULL && dirs[1] != NULL)
|
|
||||||
+ else if (dirs_in_use > 1
|
|
||||||
+ && dirs != NULL
|
|
||||||
+ && dirs[1] != NULL
|
|
||||||
+ /* DWARF-5 directory tables expect dir[0] to be the same as
|
|
||||||
+ DW_AT_comp_dir, which is the same as pwd. */
|
|
||||||
+ && dwarf_level < 5)
|
|
||||||
dir = remap_debug_filename (dirs[1]);
|
|
||||||
else
|
|
||||||
dir = remap_debug_filename (getpwd ());
|
|
||||||
@@ -2185,8 +2205,8 @@ out_dir_and_file_list (segT line_seg, in
|
|
||||||
uses slot zero, but that is only set explicitly using a
|
|
||||||
.file 0 directive. If that isn't used, but file 1 is,
|
|
||||||
then use that as main file name. */
|
|
||||||
- if (DWARF2_LINE_VERSION >= 5 && i == 0 && files_in_use >= 1)
|
|
||||||
- files[0].filename = files[1].filename;
|
|
||||||
+ if (DWARF2_LINE_VERSION >= 5 && i == 0 && files_in_use >= 1 && files[0].filename == NULL)
|
|
||||||
+ files[0].filename = files[1].filename;
|
|
||||||
else
|
|
||||||
files[i].filename = "";
|
|
||||||
if (DWARF2_LINE_VERSION < 5 || i != 0)
|
|
||||||
Only in binutils-2.37/gas/testsuite/gas/elf: dwarf-5-dir0.d
|
|
||||||
Only in binutils-2.37/gas/testsuite/gas/elf: dwarf-5-dir0.s
|
|
||||||
diff -rup binutils.orig/gas/testsuite/gas/elf/dwarf-5-file0.d binutils-2.37/gas/testsuite/gas/elf/dwarf-5-file0.d
|
|
||||||
--- binutils.orig/gas/testsuite/gas/elf/dwarf-5-file0.d 2021-08-09 17:28:17.817317884 +0100
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/elf/dwarf-5-file0.d 2021-08-09 17:28:27.043264112 +0100
|
|
||||||
@@ -3,17 +3,18 @@
|
|
||||||
#readelf: -wl
|
|
||||||
|
|
||||||
#...
|
|
||||||
- The Directory Table \(offset 0x.*, lines 3, columns 1\):
|
|
||||||
+ The Directory Table \(offset 0x.*, lines 4, columns 1\):
|
|
||||||
Entry Name
|
|
||||||
- 0 \(indirect line string, offset: 0x.*\): master directory
|
|
||||||
- 1 \(indirect line string, offset: 0x.*\): secondary directory
|
|
||||||
- 2 \(indirect line string, offset: 0x.*\): /tmp
|
|
||||||
+#...
|
|
||||||
+ 1 \(indirect line string, offset: 0x.*\): master directory
|
|
||||||
+ 2 \(indirect line string, offset: 0x.*\): secondary directory
|
|
||||||
+ 3 \(indirect line string, offset: 0x.*\): /tmp
|
|
||||||
|
|
||||||
The File Name Table \(offset 0x.*, lines 3, columns 3\):
|
|
||||||
Entry Dir MD5 Name
|
|
||||||
- 0 0 0x0 \(indirect line string, offset: 0x.*\): master source file
|
|
||||||
- 1 1 0x0 \(indirect line string, offset: 0x.*\): secondary source file
|
|
||||||
- 2 2 0x95828e8bc4f7404dbf7526fb7bd0f192 \(indirect line string, offset: 0x.*\): foo.c
|
|
||||||
+ 0 1 0x0 \(indirect line string, offset: 0x.*\): master source file
|
|
||||||
+ 1 2 0x0 \(indirect line string, offset: 0x.*\): secondary source file
|
|
||||||
+ 2 3 0x95828e8bc4f7404dbf7526fb7bd0f192 \(indirect line string, offset: 0x.*\): foo.c
|
|
||||||
#pass
|
|
||||||
|
|
||||||
|
|
||||||
diff -rup binutils.orig/gas/testsuite/gas/elf/elf.exp binutils-2.37/gas/testsuite/gas/elf/elf.exp
|
|
||||||
--- binutils.orig/gas/testsuite/gas/elf/elf.exp 2021-08-09 17:28:17.817317884 +0100
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/elf/elf.exp 2021-08-09 17:28:27.044264106 +0100
|
|
||||||
@@ -297,6 +297,7 @@ if { [is_elf_format] } then {
|
|
||||||
run_dump_test "dwarf2-19" $dump_opts
|
|
||||||
run_dump_test "dwarf2-20" $dump_opts
|
|
||||||
run_dump_test "dwarf-5-file0" $dump_opts
|
|
||||||
+ run_dump_test "dwarf-5-dir0" $dump_opts
|
|
||||||
run_dump_test "dwarf-4-cu" $dump_opts
|
|
||||||
run_dump_test "dwarf-5-cu" $dump_opts
|
|
||||||
run_dump_test "dwarf-5-nop-for-line-table" $dump_opts
|
|
||||||
diff -rup binutils.orig/gas/testsuite/gas/i386/dwarf5-line-1.d binutils-2.37/gas/testsuite/gas/i386/dwarf5-line-1.d
|
|
||||||
--- binutils.orig/gas/testsuite/gas/i386/dwarf5-line-1.d 2021-08-09 17:28:17.782318088 +0100
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/i386/dwarf5-line-1.d 2021-08-09 17:28:27.044264106 +0100
|
|
||||||
@@ -33,7 +33,7 @@ Raw dump of debug contents of section \.
|
|
||||||
|
|
||||||
The Directory Table \(offset 0x.*, lines 2, columns 1\):
|
|
||||||
Entry Name
|
|
||||||
- 0 \(indirect line string, offset: 0x.*\): .*/gas/testsuite/gas/i386
|
|
||||||
+ 0 \(indirect line string, offset: 0x.*\): .*/gas/testsuite
|
|
||||||
1 \(indirect line string, offset: 0x.*\): .*/gas/testsuite/gas/i386
|
|
||||||
|
|
||||||
The File Name Table \(offset 0x.*, lines 2, columns 3\):
|
|
||||||
diff -rup binutils.orig/gas/testsuite/gas/i386/dwarf5-line-2.d binutils-2.37/gas/testsuite/gas/i386/dwarf5-line-2.d
|
|
||||||
--- binutils.orig/gas/testsuite/gas/i386/dwarf5-line-2.d 2021-08-09 17:28:17.785318070 +0100
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/i386/dwarf5-line-2.d 2021-08-09 17:28:27.044264106 +0100
|
|
||||||
@@ -33,7 +33,7 @@ Raw dump of debug contents of section \.
|
|
||||||
|
|
||||||
The Directory Table \(offset 0x.*, lines 2, columns 1\):
|
|
||||||
Entry Name
|
|
||||||
- 0 \(indirect line string, offset: 0x.*\): .*/gas/testsuite/gas/i386
|
|
||||||
+ 0 \(indirect line string, offset: 0x.*\): .*/gas/testsuite
|
|
||||||
1 \(indirect line string, offset: 0x.*\): .*/gas/testsuite/gas/i386
|
|
||||||
|
|
||||||
The File Name Table \(offset 0x.*, lines 1, columns 3\):
|
|
||||||
--- /dev/null 2021-08-09 07:51:33.817495606 +0100
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/elf/dwarf-5-dir0.s 2021-08-09 17:28:54.787102415 +0100
|
|
||||||
@@ -0,0 +1,19 @@
|
|
||||||
+ .section .debug_info,"",%progbits
|
|
||||||
+ .4byte 0x8a
|
|
||||||
+ .2byte 0x2
|
|
||||||
+ .4byte .Ldebug_abbrev0
|
|
||||||
+ .byte 0x4
|
|
||||||
+ .uleb128 0x1
|
|
||||||
+
|
|
||||||
+ .file 0 "../not-the-build-directory/master-source-file.c"
|
|
||||||
+ .line 1
|
|
||||||
+ .text
|
|
||||||
+ .octa 0x12345678901234567890123456789012
|
|
||||||
+
|
|
||||||
+ .file 1 "secondary directory/secondary source file"
|
|
||||||
+ .line 2
|
|
||||||
+ .word 2
|
|
||||||
+
|
|
||||||
+ .file 2 "/tmp" "foo.c" md5 0x95828e8bc4f7404dbf7526fb7bd0f192
|
|
||||||
+ .line 5
|
|
||||||
+ .word 6
|
|
||||||
--- /dev/null 2021-08-09 07:51:33.817495606 +0100
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/elf/dwarf-5-dir0.d 2021-08-09 17:28:54.787102415 +0100
|
|
||||||
@@ -0,0 +1,20 @@
|
|
||||||
+#as: --gdwarf-5
|
|
||||||
+#name: DWARF5 dir[0]
|
|
||||||
+#readelf: -wl
|
|
||||||
+
|
|
||||||
+#...
|
|
||||||
+ The Directory Table \(offset 0x.*, lines 4, columns 1\):
|
|
||||||
+ Entry Name
|
|
||||||
+ 0 \(indirect line string, offset: 0x0\): .*/gas/testsuite
|
|
||||||
+ 1 \(indirect line string, offset: 0x.*\): ../not-the-build-directory
|
|
||||||
+ 2 \(indirect line string, offset: 0x.*\): secondary directory
|
|
||||||
+ 3 \(indirect line string, offset: 0x.*\): /tmp
|
|
||||||
+
|
|
||||||
+ The File Name Table \(offset 0x.*, lines 3, columns 3\):
|
|
||||||
+ Entry Dir MD5 Name
|
|
||||||
+ 0 1 0x0 \(indirect line string, offset: 0x.*\): master-source-file.c
|
|
||||||
+ 1 2 0x0 \(indirect line string, offset: 0x.*\): secondary source file
|
|
||||||
+ 2 3 0x95828e8bc4f7404dbf7526fb7bd0f192 \(indirect line string, offset: 0x.*\): foo.c
|
|
||||||
+#pass
|
|
||||||
+
|
|
||||||
+
|
|
@ -1,19 +0,0 @@
|
|||||||
--- binutils.orig/bfd/linker.c 2021-10-13 13:21:03.125429867 +0100
|
|
||||||
+++ binutils-2.37/bfd/linker.c 2021-10-13 13:33:31.328554905 +0100
|
|
||||||
@@ -1420,6 +1420,7 @@ _bfd_generic_link_add_one_symbol (struct
|
|
||||||
{
|
|
||||||
row = COMMON_ROW;
|
|
||||||
if (!bfd_link_relocatable (info)
|
|
||||||
+ && name != NULL
|
|
||||||
&& name[0] == '_'
|
|
||||||
&& name[1] == '_'
|
|
||||||
&& strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0)
|
|
||||||
@@ -1682,7 +1683,7 @@ _bfd_generic_link_add_one_symbol (struct
|
|
||||||
cycle = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- if (strcmp (h->u.i.link->root.string, string) == 0)
|
|
||||||
+ if (string != NULL && strcmp (h->u.i.link->root.string, string) == 0)
|
|
||||||
break;
|
|
||||||
/* Fall through. */
|
|
||||||
case MDEF:
|
|
@ -1,323 +0,0 @@
|
|||||||
commit 58f3b6a3495074da39ba6e19935e4401dcbacf88
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Thu Sep 9 09:14:42 2021 -0700
|
|
||||||
|
|
||||||
gas: Use the directory name in .file 0
|
|
||||||
|
|
||||||
DWARF5 allows .file 0 to take an optional directory name. Set the entry
|
|
||||||
0 of the directory table to the directory name in .file 0.
|
|
||||||
|
|
||||||
PR gas/28266
|
|
||||||
* dwarf2dbg.c (get_directory_table_entry): Add an argument for
|
|
||||||
the directory name in .file 0 and use it, instead of PWD.
|
|
||||||
(allocate_filenum): Pass NULL to get_directory_table_entry.
|
|
||||||
(allocate_filename_to_slot): Pass the incoming dirname to
|
|
||||||
get_directory_table_entry.
|
|
||||||
* testsuite/gas/elf/dwarf-5-file0-2.d: New file.
|
|
||||||
* testsuite/gas/elf/dwarf-5-file0-2.s: Likewise.
|
|
||||||
* testsuite/gas/elf/elf.exp: Run dwarf-5-file0-2.
|
|
||||||
|
|
||||||
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
|
|
||||||
index 8f5248534ad..9e3437b8948 100644
|
|
||||||
--- a/gas/dwarf2dbg.c
|
|
||||||
+++ b/gas/dwarf2dbg.c
|
|
||||||
@@ -592,6 +592,7 @@ get_basename (const char * pathname)
|
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
get_directory_table_entry (const char *dirname,
|
|
||||||
+ const char *file0_dirname,
|
|
||||||
size_t dirlen,
|
|
||||||
bool can_use_zero)
|
|
||||||
{
|
|
||||||
@@ -621,7 +622,7 @@ get_directory_table_entry (const char *dirname,
|
|
||||||
{
|
|
||||||
if (dirs == NULL || dirs[0] == NULL)
|
|
||||||
{
|
|
||||||
- const char * pwd = getpwd ();
|
|
||||||
+ const char * pwd = file0_dirname ? file0_dirname : getpwd ();
|
|
||||||
|
|
||||||
if (dwarf_level >= 5 && strcmp (dirname, pwd) != 0)
|
|
||||||
{
|
|
||||||
@@ -630,7 +631,8 @@ get_directory_table_entry (const char *dirname,
|
|
||||||
directory). Since we are about to create a directory entry that
|
|
||||||
is not the same, allocate the current directory first.
|
|
||||||
FIXME: Alternatively we could generate an error message here. */
|
|
||||||
- (void) get_directory_table_entry (pwd, strlen (pwd), true);
|
|
||||||
+ (void) get_directory_table_entry (pwd, NULL, strlen (pwd),
|
|
||||||
+ true);
|
|
||||||
d = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
@@ -726,7 +728,7 @@ allocate_filenum (const char * pathname)
|
|
||||||
file = get_basename (pathname);
|
|
||||||
dir_len = file - pathname;
|
|
||||||
|
|
||||||
- dir = get_directory_table_entry (pathname, dir_len, false);
|
|
||||||
+ dir = get_directory_table_entry (pathname, NULL, dir_len, false);
|
|
||||||
|
|
||||||
/* Do not use slot-0. That is specifically reserved for use by
|
|
||||||
the '.file 0 "name"' directive. */
|
|
||||||
@@ -766,6 +768,7 @@ allocate_filename_to_slot (const char *dirname,
|
|
||||||
const char *file;
|
|
||||||
size_t dirlen;
|
|
||||||
unsigned int i, d;
|
|
||||||
+ const char *file0_dirname = dirname;
|
|
||||||
|
|
||||||
/* Short circuit the common case of adding the same pathname
|
|
||||||
as last time. */
|
|
||||||
@@ -856,7 +859,8 @@ allocate_filename_to_slot (const char *dirname,
|
|
||||||
file = filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
- d = get_directory_table_entry (dirname, dirlen, num == 0);
|
|
||||||
+ d = get_directory_table_entry (dirname, file0_dirname, dirlen,
|
|
||||||
+ num == 0);
|
|
||||||
i = num;
|
|
||||||
|
|
||||||
if (! assign_file_to_slot (i, file, d))
|
|
||||||
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.d b/gas/testsuite/gas/elf/dwarf-5-file0-2.d
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..4b3ed29f4c9
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.d
|
|
||||||
@@ -0,0 +1,15 @@
|
|
||||||
+#as: --gdwarf-5
|
|
||||||
+#name: DWARF5 .file 0 dir file
|
|
||||||
+#readelf: -wl
|
|
||||||
+
|
|
||||||
+#...
|
|
||||||
+ The Directory Table \(offset 0x.*, lines 1, columns 1\):
|
|
||||||
+ Entry Name
|
|
||||||
+#...
|
|
||||||
+ 0 \(indirect line string, offset: 0x.*\): /example
|
|
||||||
+
|
|
||||||
+ The File Name Table \(offset 0x.*, lines 2, columns 2\):
|
|
||||||
+ Entry Dir Name
|
|
||||||
+ 0 0 \(indirect line string, offset: 0x.*\): test.c
|
|
||||||
+ 1 0 \(indirect line string, offset: 0x.*\): test.c
|
|
||||||
+#pass
|
|
||||||
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.s b/gas/testsuite/gas/elf/dwarf-5-file0-2.s
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..135a03bf493
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.s
|
|
||||||
@@ -0,0 +1,111 @@
|
|
||||||
+ .file "test.c"
|
|
||||||
+ .text
|
|
||||||
+.Ltext0:
|
|
||||||
+ .file 0 "/example" "test.c"
|
|
||||||
+ .globl x
|
|
||||||
+ .section .bss
|
|
||||||
+ .balign 4
|
|
||||||
+ .type x, @object
|
|
||||||
+ .size x, 4
|
|
||||||
+x:
|
|
||||||
+ .zero 4
|
|
||||||
+ .text
|
|
||||||
+.Letext0:
|
|
||||||
+ .file 1 "test.c"
|
|
||||||
+ .section .debug_info,"",%progbits
|
|
||||||
+.Ldebug_info0:
|
|
||||||
+ .long 0x32
|
|
||||||
+ .2byte 0x5
|
|
||||||
+ .byte 0x1
|
|
||||||
+ .byte 0x4
|
|
||||||
+ .long .Ldebug_abbrev0
|
|
||||||
+ .uleb128 0x1
|
|
||||||
+ .long .LASF2
|
|
||||||
+ .byte 0x1d
|
|
||||||
+ .long .LASF0
|
|
||||||
+ .long .LASF1
|
|
||||||
+ .long .Ldebug_line0
|
|
||||||
+ .uleb128 0x2
|
|
||||||
+ .string "x"
|
|
||||||
+ .byte 0x1
|
|
||||||
+ .byte 0x1
|
|
||||||
+ .byte 0x5
|
|
||||||
+ .long 0x2e
|
|
||||||
+ .uleb128 0x5
|
|
||||||
+ .byte 0x3
|
|
||||||
+ .long x
|
|
||||||
+ .uleb128 0x3
|
|
||||||
+ .byte 0x4
|
|
||||||
+ .byte 0x5
|
|
||||||
+ .string "int"
|
|
||||||
+ .byte 0
|
|
||||||
+ .section .debug_abbrev,"",%progbits
|
|
||||||
+.Ldebug_abbrev0:
|
|
||||||
+ .uleb128 0x1
|
|
||||||
+ .uleb128 0x11
|
|
||||||
+ .byte 0x1
|
|
||||||
+ .uleb128 0x25
|
|
||||||
+ .uleb128 0xe
|
|
||||||
+ .uleb128 0x13
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0x3
|
|
||||||
+ .uleb128 0x1f
|
|
||||||
+ .uleb128 0x1b
|
|
||||||
+ .uleb128 0x1f
|
|
||||||
+ .uleb128 0x10
|
|
||||||
+ .uleb128 0x17
|
|
||||||
+ .byte 0
|
|
||||||
+ .byte 0
|
|
||||||
+ .uleb128 0x2
|
|
||||||
+ .uleb128 0x34
|
|
||||||
+ .byte 0
|
|
||||||
+ .uleb128 0x3
|
|
||||||
+ .uleb128 0x8
|
|
||||||
+ .uleb128 0x3a
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0x3b
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0x39
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0x49
|
|
||||||
+ .uleb128 0x13
|
|
||||||
+ .uleb128 0x3f
|
|
||||||
+ .uleb128 0x19
|
|
||||||
+ .uleb128 0x2
|
|
||||||
+ .uleb128 0x18
|
|
||||||
+ .byte 0
|
|
||||||
+ .byte 0
|
|
||||||
+ .uleb128 0x3
|
|
||||||
+ .uleb128 0x24
|
|
||||||
+ .byte 0
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0x3e
|
|
||||||
+ .uleb128 0xb
|
|
||||||
+ .uleb128 0x3
|
|
||||||
+ .uleb128 0x8
|
|
||||||
+ .byte 0
|
|
||||||
+ .byte 0
|
|
||||||
+ .byte 0
|
|
||||||
+ .section .debug_aranges,"",%progbits
|
|
||||||
+ .long 0x14
|
|
||||||
+ .2byte 0x2
|
|
||||||
+ .long .Ldebug_info0
|
|
||||||
+ .byte 0x4
|
|
||||||
+ .byte 0
|
|
||||||
+ .2byte 0
|
|
||||||
+ .2byte 0
|
|
||||||
+ .long 0
|
|
||||||
+ .long 0
|
|
||||||
+ .section .debug_line,"",%progbits
|
|
||||||
+.Ldebug_line0:
|
|
||||||
+ .section .debug_str,"MS",%progbits,1
|
|
||||||
+.LASF2:
|
|
||||||
+ .string "GNU C17 11.2.1 -g"
|
|
||||||
+ .section .debug_line_str,"MS",%progbits,1
|
|
||||||
+.LASF1:
|
|
||||||
+ .string "/example"
|
|
||||||
+.LASF0:
|
|
||||||
+ .string "test.c"
|
|
||||||
+ .ident "GCC: (GNU) 11.2.1"
|
|
||||||
+ .section .note.GNU-stack,"",%progbits
|
|
||||||
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
|
|
||||||
index 18bc1db8c70..2485008d569 100644
|
|
||||||
--- a/gas/testsuite/gas/elf/elf.exp
|
|
||||||
+++ b/gas/testsuite/gas/elf/elf.exp
|
|
||||||
@@ -297,6 +297,7 @@ if { [is_elf_format] } then {
|
|
||||||
run_dump_test "dwarf2-19" $dump_opts
|
|
||||||
run_dump_test "dwarf2-20" $dump_opts
|
|
||||||
run_dump_test "dwarf-5-file0" $dump_opts
|
|
||||||
+ run_dump_test "dwarf-5-file0-2" $dump_opts
|
|
||||||
run_dump_test "dwarf-5-dir0" $dump_opts
|
|
||||||
run_dump_test "dwarf-4-cu" $dump_opts
|
|
||||||
run_dump_test "dwarf-5-cu" $dump_opts
|
|
||||||
commit 9f81b99e2426d19760c20c07f8cd3ae5cd85e8df
|
|
||||||
Author: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Fri Sep 10 18:01:43 2021 +0930
|
|
||||||
|
|
||||||
Re: gas: Use the directory name in .file 0
|
|
||||||
|
|
||||||
PR gas/28266
|
|
||||||
* testsuite/gas/elf/dwarf-5-file0-2.s: Use %object rather than
|
|
||||||
@object, .4byte instead of .long, and .asciz instead of .string.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.s b/gas/testsuite/gas/elf/dwarf-5-file0-2.s
|
|
||||||
index 135a03bf493..bab4a16b56b 100644
|
|
||||||
--- a/gas/testsuite/gas/elf/dwarf-5-file0-2.s
|
|
||||||
+++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.s
|
|
||||||
@@ -5,7 +5,7 @@
|
|
||||||
.globl x
|
|
||||||
.section .bss
|
|
||||||
.balign 4
|
|
||||||
- .type x, @object
|
|
||||||
+ .type x, %object
|
|
||||||
.size x, 4
|
|
||||||
x:
|
|
||||||
.zero 4
|
|
||||||
@@ -14,30 +14,30 @@ x:
|
|
||||||
.file 1 "test.c"
|
|
||||||
.section .debug_info,"",%progbits
|
|
||||||
.Ldebug_info0:
|
|
||||||
- .long 0x32
|
|
||||||
+ .4byte 0x32
|
|
||||||
.2byte 0x5
|
|
||||||
.byte 0x1
|
|
||||||
.byte 0x4
|
|
||||||
- .long .Ldebug_abbrev0
|
|
||||||
+ .4byte .Ldebug_abbrev0
|
|
||||||
.uleb128 0x1
|
|
||||||
- .long .LASF2
|
|
||||||
+ .4byte .LASF2
|
|
||||||
.byte 0x1d
|
|
||||||
- .long .LASF0
|
|
||||||
- .long .LASF1
|
|
||||||
- .long .Ldebug_line0
|
|
||||||
+ .4byte .LASF0
|
|
||||||
+ .4byte .LASF1
|
|
||||||
+ .4byte .Ldebug_line0
|
|
||||||
.uleb128 0x2
|
|
||||||
- .string "x"
|
|
||||||
+ .asciz "x"
|
|
||||||
.byte 0x1
|
|
||||||
.byte 0x1
|
|
||||||
.byte 0x5
|
|
||||||
- .long 0x2e
|
|
||||||
+ .4byte 0x2e
|
|
||||||
.uleb128 0x5
|
|
||||||
.byte 0x3
|
|
||||||
- .long x
|
|
||||||
+ .4byte x
|
|
||||||
.uleb128 0x3
|
|
||||||
.byte 0x4
|
|
||||||
.byte 0x5
|
|
||||||
- .string "int"
|
|
||||||
+ .asciz "int"
|
|
||||||
.byte 0
|
|
||||||
.section .debug_abbrev,"",%progbits
|
|
||||||
.Ldebug_abbrev0:
|
|
||||||
@@ -88,24 +88,24 @@ x:
|
|
||||||
.byte 0
|
|
||||||
.byte 0
|
|
||||||
.section .debug_aranges,"",%progbits
|
|
||||||
- .long 0x14
|
|
||||||
+ .4byte 0x14
|
|
||||||
.2byte 0x2
|
|
||||||
- .long .Ldebug_info0
|
|
||||||
+ .4byte .Ldebug_info0
|
|
||||||
.byte 0x4
|
|
||||||
.byte 0
|
|
||||||
.2byte 0
|
|
||||||
.2byte 0
|
|
||||||
- .long 0
|
|
||||||
- .long 0
|
|
||||||
+ .4byte 0
|
|
||||||
+ .4byte 0
|
|
||||||
.section .debug_line,"",%progbits
|
|
||||||
.Ldebug_line0:
|
|
||||||
.section .debug_str,"MS",%progbits,1
|
|
||||||
.LASF2:
|
|
||||||
- .string "GNU C17 11.2.1 -g"
|
|
||||||
+ .asciz "GNU C17 11.2.1 -g"
|
|
||||||
.section .debug_line_str,"MS",%progbits,1
|
|
||||||
.LASF1:
|
|
||||||
- .string "/example"
|
|
||||||
+ .asciz "/example"
|
|
||||||
.LASF0:
|
|
||||||
- .string "test.c"
|
|
||||||
+ .asciz "test.c"
|
|
||||||
.ident "GCC: (GNU) 11.2.1"
|
|
||||||
.section .note.GNU-stack,"",%progbits
|
|
@ -1,384 +0,0 @@
|
|||||||
diff -rupN binutils.orig/gas/NEWS binutils-2.37/gas/NEWS
|
|
||||||
--- binutils.orig/gas/NEWS 2021-11-18 16:50:39.104088534 +0000
|
|
||||||
+++ binutils-2.37/gas/NEWS 2021-11-18 16:51:16.340948280 +0000
|
|
||||||
@@ -1,5 +1,13 @@
|
|
||||||
-*- text -*-
|
|
||||||
|
|
||||||
+* The --multibyte-handling=[allow|warn|warn-sym-only] option tells the
|
|
||||||
+ assembler what to when it encoutners multibyte characters in the input. The
|
|
||||||
+ default is to allow them. Setting the option to "warn" will generate a
|
|
||||||
+ warning message whenever any multibyte character is encountered. Using the
|
|
||||||
+ option to "warn-sym-only" will make the assembler generate a warning whenever a
|
|
||||||
+ symbol is defined containing multibyte characters. (References to undefined
|
|
||||||
+ symbols will not generate warnings).
|
|
||||||
+
|
|
||||||
Changes in 2.37:
|
|
||||||
|
|
||||||
* arm-symbianelf support removed.
|
|
||||||
diff -rupN binutils.orig/gas/app.c binutils-2.37/gas/app.c
|
|
||||||
--- binutils.orig/gas/app.c 2021-11-18 16:50:39.104088534 +0000
|
|
||||||
+++ binutils-2.37/gas/app.c 2021-11-18 16:50:42.530075630 +0000
|
|
||||||
@@ -345,6 +345,55 @@ process_escape (int ch)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define MULTIBYTE_WARN_COUNT_LIMIT 10
|
|
||||||
+static unsigned int multibyte_warn_count = 0;
|
|
||||||
+
|
|
||||||
+bool
|
|
||||||
+scan_for_multibyte_characters (const unsigned char * start,
|
|
||||||
+ const unsigned char * end,
|
|
||||||
+ bool warn)
|
|
||||||
+{
|
|
||||||
+ if (end <= start)
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ if (warn && multibyte_warn_count > MULTIBYTE_WARN_COUNT_LIMIT)
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ bool found = false;
|
|
||||||
+
|
|
||||||
+ while (start < end)
|
|
||||||
+ {
|
|
||||||
+ unsigned char c;
|
|
||||||
+
|
|
||||||
+ if ((c = * start++) <= 0x7f)
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
+ if (!warn)
|
|
||||||
+ return true;
|
|
||||||
+
|
|
||||||
+ found = true;
|
|
||||||
+
|
|
||||||
+ const char * filename;
|
|
||||||
+ unsigned int lineno;
|
|
||||||
+
|
|
||||||
+ filename = as_where (& lineno);
|
|
||||||
+ if (filename == NULL)
|
|
||||||
+ as_warn (_("multibyte character (%#x) encountered in input"), c);
|
|
||||||
+ else if (lineno == 0)
|
|
||||||
+ as_warn (_("multibyte character (%#x) encountered in %s"), c, filename);
|
|
||||||
+ else
|
|
||||||
+ as_warn (_("multibyte character (%#x) encountered in %s at or near line %u"), c, filename, lineno);
|
|
||||||
+
|
|
||||||
+ if (++ multibyte_warn_count == MULTIBYTE_WARN_COUNT_LIMIT)
|
|
||||||
+ {
|
|
||||||
+ as_warn (_("further multibyte character warnings suppressed"));
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return found;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* This function is called to process input characters. The GET
|
|
||||||
parameter is used to retrieve more input characters. GET should
|
|
||||||
set its parameter to point to a buffer, and return the length of
|
|
||||||
@@ -463,6 +512,11 @@ do_scrub_chars (size_t (*get) (char *, s
|
|
||||||
return 0;
|
|
||||||
from = input_buffer;
|
|
||||||
fromend = from + fromlen;
|
|
||||||
+
|
|
||||||
+ if (multibyte_handling == multibyte_warn)
|
|
||||||
+ (void) scan_for_multibyte_characters ((const unsigned char *) from,
|
|
||||||
+ (const unsigned char* ) fromend,
|
|
||||||
+ true /* Generate warnings. */);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
diff -rupN binutils.orig/gas/as.c binutils-2.37/gas/as.c
|
|
||||||
--- binutils.orig/gas/as.c 2021-11-18 16:50:39.104088534 +0000
|
|
||||||
+++ binutils-2.37/gas/as.c 2021-11-18 16:50:42.531075627 +0000
|
|
||||||
@@ -474,7 +474,7 @@ parse_args (int * pargc, char *** pargv)
|
|
||||||
OPTION_DEBUG_PREFIX_MAP,
|
|
||||||
OPTION_DEFSYM,
|
|
||||||
OPTION_LISTING_LHS_WIDTH,
|
|
||||||
- OPTION_LISTING_LHS_WIDTH2,
|
|
||||||
+ OPTION_LISTING_LHS_WIDTH2, /* = STD_BASE + 10 */
|
|
||||||
OPTION_LISTING_RHS_WIDTH,
|
|
||||||
OPTION_LISTING_CONT_LINES,
|
|
||||||
OPTION_DEPFILE,
|
|
||||||
@@ -484,7 +484,7 @@ parse_args (int * pargc, char *** pargv)
|
|
||||||
OPTION_GDWARF_3,
|
|
||||||
OPTION_GDWARF_4,
|
|
||||||
OPTION_GDWARF_5,
|
|
||||||
- OPTION_GDWARF_SECTIONS,
|
|
||||||
+ OPTION_GDWARF_SECTIONS, /* = STD_BASE + 20 */
|
|
||||||
OPTION_GDWARF_CIE_VERSION,
|
|
||||||
OPTION_STRIP_LOCAL_ABSOLUTE,
|
|
||||||
OPTION_TRADITIONAL_FORMAT,
|
|
||||||
@@ -494,7 +494,7 @@ parse_args (int * pargc, char *** pargv)
|
|
||||||
OPTION_NOEXECSTACK,
|
|
||||||
OPTION_SIZE_CHECK,
|
|
||||||
OPTION_ELF_STT_COMMON,
|
|
||||||
- OPTION_ELF_BUILD_NOTES,
|
|
||||||
+ OPTION_ELF_BUILD_NOTES, /* = STD_BASE + 30 */
|
|
||||||
OPTION_SECTNAME_SUBST,
|
|
||||||
OPTION_ALTERNATE,
|
|
||||||
OPTION_AL,
|
|
||||||
@@ -503,7 +503,8 @@ parse_args (int * pargc, char *** pargv)
|
|
||||||
OPTION_WARN_FATAL,
|
|
||||||
OPTION_COMPRESS_DEBUG,
|
|
||||||
OPTION_NOCOMPRESS_DEBUG,
|
|
||||||
- OPTION_NO_PAD_SECTIONS /* = STD_BASE + 40 */
|
|
||||||
+ OPTION_NO_PAD_SECTIONS,
|
|
||||||
+ OPTION_MULTIBYTE_HANDLING /* = STD_BASE + 40 */
|
|
||||||
/* When you add options here, check that they do
|
|
||||||
not collide with OPTION_MD_BASE. See as.h. */
|
|
||||||
};
|
|
||||||
@@ -581,6 +582,7 @@ parse_args (int * pargc, char *** pargv)
|
|
||||||
,{"target-help", no_argument, NULL, OPTION_TARGET_HELP}
|
|
||||||
,{"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT}
|
|
||||||
,{"warn", no_argument, NULL, OPTION_WARN}
|
|
||||||
+ ,{"multibyte-handling", required_argument, NULL, OPTION_MULTIBYTE_HANDLING}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Construct the option lists from the standard list and the target
|
|
||||||
@@ -683,6 +685,19 @@ parse_args (int * pargc, char *** pargv)
|
|
||||||
flag_traditional_format = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case OPTION_MULTIBYTE_HANDLING:
|
|
||||||
+ if (strcmp (optarg, "allow") == 0)
|
|
||||||
+ multibyte_handling = multibyte_allow;
|
|
||||||
+ else if (strcmp (optarg, "warn") == 0)
|
|
||||||
+ multibyte_handling = multibyte_warn;
|
|
||||||
+ else if (strcmp (optarg, "warn-sym-only") == 0)
|
|
||||||
+ multibyte_handling = multibyte_warn_syms;
|
|
||||||
+ else if (strcmp (optarg, "warn_sym_only") == 0)
|
|
||||||
+ multibyte_handling = multibyte_warn_syms;
|
|
||||||
+ else
|
|
||||||
+ as_fatal (_("unexpected argument to --multibyte-input-option: '%s'"), optarg);
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
case OPTION_VERSION:
|
|
||||||
/* This output is intended to follow the GNU standards document. */
|
|
||||||
printf (_("GNU assembler %s\n"), BFD_VERSION_STRING);
|
|
||||||
diff -rupN binutils.orig/gas/as.h binutils-2.37/gas/as.h
|
|
||||||
--- binutils.orig/gas/as.h 2021-11-18 16:50:38.834089551 +0000
|
|
||||||
+++ binutils-2.37/gas/as.h 2021-11-18 16:50:42.531075627 +0000
|
|
||||||
@@ -344,6 +344,14 @@ COMMON int linkrelax;
|
|
||||||
|
|
||||||
COMMON int do_not_pad_sections_to_alignment;
|
|
||||||
|
|
||||||
+enum multibyte_input_handling
|
|
||||||
+{
|
|
||||||
+ multibyte_allow = 0,
|
|
||||||
+ multibyte_warn,
|
|
||||||
+ multibyte_warn_syms
|
|
||||||
+};
|
|
||||||
+COMMON enum multibyte_input_handling multibyte_handling;
|
|
||||||
+
|
|
||||||
/* TRUE if we should produce a listing. */
|
|
||||||
extern int listing;
|
|
||||||
|
|
||||||
@@ -450,6 +458,7 @@ void input_scrub_insert_file (char *);
|
|
||||||
char * input_scrub_new_file (const char *);
|
|
||||||
char * input_scrub_next_buffer (char **bufp);
|
|
||||||
size_t do_scrub_chars (size_t (*get) (char *, size_t), char *, size_t);
|
|
||||||
+bool scan_for_multibyte_characters (const unsigned char *, const unsigned char *, bool);
|
|
||||||
int gen_to_words (LITTLENUM_TYPE *, int, long);
|
|
||||||
int had_err (void);
|
|
||||||
int ignore_input (void);
|
|
||||||
diff -rupN binutils.orig/gas/doc/as.texi binutils-2.37/gas/doc/as.texi
|
|
||||||
--- binutils.orig/gas/doc/as.texi 2021-11-18 16:50:38.838089536 +0000
|
|
||||||
+++ binutils-2.37/gas/doc/as.texi 2021-11-18 16:50:42.535075612 +0000
|
|
||||||
@@ -245,6 +245,7 @@ gcc(1), ld(1), and the Info entries for
|
|
||||||
[@b{--sectname-subst}] [@b{--size-check=[error|warning]}]
|
|
||||||
[@b{--elf-stt-common=[no|yes]}]
|
|
||||||
[@b{--generate-missing-build-notes=[no|yes]}]
|
|
||||||
+ [@b{--multibyte-handling=[allow|warn|warn-sym-only]}]
|
|
||||||
[@b{--target-help}] [@var{target-options}]
|
|
||||||
[@b{--}|@var{files} @dots{}]
|
|
||||||
@c
|
|
||||||
@@ -866,6 +867,18 @@ Set the maximum width of an input source
|
|
||||||
Set the maximum number of lines printed in a listing for a single line of input
|
|
||||||
to @var{number} + 1.
|
|
||||||
|
|
||||||
+@item --multibyte-handling=allow
|
|
||||||
+@itemx --multibyte-handling=warn
|
|
||||||
+@itemx --multibyte-handling=warn-sym-only
|
|
||||||
+Controls how the assembler handles multibyte characters in the input. The
|
|
||||||
+default (which can be restored by using the @option{allow} argument) is to
|
|
||||||
+allow such characters without complaint. Using the @option{warn} argument will
|
|
||||||
+make the assembler generate a warning message whenever any multibyte character
|
|
||||||
+is encountered. Using the @option{warn-sym-only} argument will only cause a
|
|
||||||
+warning to be generated when a symbol is defined with a name that contains
|
|
||||||
+multibyte characters. (References to undefined symbols will not generate a
|
|
||||||
+warning).
|
|
||||||
+
|
|
||||||
@item --no-pad-sections
|
|
||||||
Stop the assembler for padding the ends of output sections to the alignment
|
|
||||||
of that section. The default is to pad the sections, but this can waste space
|
|
||||||
@@ -2942,9 +2955,11 @@ are noted in @ref{Machine Dependencies}.
|
|
||||||
@end ifset
|
|
||||||
No symbol may begin with a digit. Case is significant.
|
|
||||||
There is no length limit; all characters are significant. Multibyte characters
|
|
||||||
-are supported. Symbols are delimited by characters not in that set, or by the
|
|
||||||
-beginning of a file (since the source program must end with a newline, the end
|
|
||||||
-of a file is not a possible symbol delimiter). @xref{Symbols}.
|
|
||||||
+are supported, but note that the setting of the
|
|
||||||
+@option{--multibyte-handling} option might prevent their use. Symbols
|
|
||||||
+are delimited by characters not in that set, or by the beginning of a file
|
|
||||||
+(since the source program must end with a newline, the end of a file is not a
|
|
||||||
+possible symbol delimiter). @xref{Symbols}.
|
|
||||||
|
|
||||||
Symbol names may also be enclosed in double quote @code{"} characters. In such
|
|
||||||
cases any characters are allowed, except for the NUL character. If a double
|
|
||||||
@@ -3834,11 +3849,18 @@ than @code{Foo}.
|
|
||||||
Symbol names do not start with a digit. An exception to this rule is made for
|
|
||||||
Local Labels. See below.
|
|
||||||
|
|
||||||
-Multibyte characters are supported. To generate a symbol name containing
|
|
||||||
+Multibyte characters are supported, but note that the setting of the
|
|
||||||
+@option{multibyte-handling} option might prevent their use.
|
|
||||||
+To generate a symbol name containing
|
|
||||||
multibyte characters enclose it within double quotes and use escape codes. cf
|
|
||||||
@xref{Strings}. Generating a multibyte symbol name from a label is not
|
|
||||||
currently supported.
|
|
||||||
|
|
||||||
+Since multibyte symbol names are unusual, and could possibly be used
|
|
||||||
+maliciously, @command{@value{AS}} provides a command line option
|
|
||||||
+(@option{--multibyte-handling=warn-sym-only}) which can be used to generate a
|
|
||||||
+warning message whenever a symbol name containing multibyte characters is defined.
|
|
||||||
+
|
|
||||||
Each symbol has exactly one name. Each name in an assembly language program
|
|
||||||
refers to exactly one symbol. You may use that symbol name any number of times
|
|
||||||
in a program.
|
|
||||||
diff -rupN binutils.orig/gas/input-scrub.c binutils-2.37/gas/input-scrub.c
|
|
||||||
--- binutils.orig/gas/input-scrub.c 2021-11-18 16:50:38.835089547 +0000
|
|
||||||
+++ binutils-2.37/gas/input-scrub.c 2021-11-18 16:50:42.535075612 +0000
|
|
||||||
@@ -377,6 +377,11 @@ input_scrub_next_buffer (char **bufp)
|
|
||||||
++p;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (multibyte_handling == multibyte_warn)
|
|
||||||
+ (void) scan_for_multibyte_characters ((const unsigned char *) p,
|
|
||||||
+ (const unsigned char *) limit,
|
|
||||||
+ true /* Generate warnings */);
|
|
||||||
+
|
|
||||||
/* We found a newline in the newly read chars. */
|
|
||||||
partial_where = p;
|
|
||||||
partial_size = limit - p;
|
|
||||||
diff -rupN binutils.orig/gas/symbols.c binutils-2.37/gas/symbols.c
|
|
||||||
--- binutils.orig/gas/symbols.c 2021-11-18 16:50:39.105088530 +0000
|
|
||||||
+++ binutils-2.37/gas/symbols.c 2021-11-18 16:52:17.980716107 +0000
|
|
||||||
@@ -78,6 +78,10 @@ struct symbol_flags
|
|
||||||
before. It is cleared as soon as any direct reference to the
|
|
||||||
symbol is present. */
|
|
||||||
unsigned int weakrefd : 1;
|
|
||||||
+
|
|
||||||
+ /* Set when a warning about the symbol containing multibyte characters
|
|
||||||
+ is generated. */
|
|
||||||
+ unsigned int multibyte_warned : 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* A pointer in the symbol may point to either a complete symbol
|
|
||||||
@@ -194,7 +198,7 @@ static void *
|
|
||||||
symbol_entry_find (htab_t table, const char *name)
|
|
||||||
{
|
|
||||||
hashval_t hash = htab_hash_string (name);
|
|
||||||
- symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
||||||
+ symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
||||||
hash, name, 0, 0, 0 } };
|
|
||||||
return htab_find_with_hash (table, &needle, hash);
|
|
||||||
}
|
|
||||||
@@ -305,6 +309,18 @@ symbol_init (symbolS *symbolP, const cha
|
|
||||||
symbolP->bsym->name = name;
|
|
||||||
symbolP->bsym->section = sec;
|
|
||||||
|
|
||||||
+ if (multibyte_handling == multibyte_warn_syms
|
|
||||||
+ && ! symbolP->flags.local_symbol
|
|
||||||
+ && sec != undefined_section
|
|
||||||
+ && ! symbolP->flags.multibyte_warned
|
|
||||||
+ && scan_for_multibyte_characters ((const unsigned char *) name,
|
|
||||||
+ (const unsigned char *) name + strlen (name),
|
|
||||||
+ false /* Do not warn. */))
|
|
||||||
+ {
|
|
||||||
+ as_warn (_("symbol '%s' contains multibyte characters"), name);
|
|
||||||
+ symbolP->flags.multibyte_warned = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
S_SET_VALUE (symbolP, valu);
|
|
||||||
|
|
||||||
symbol_clear_list_pointers (symbolP);
|
|
||||||
@@ -2413,7 +2429,21 @@ S_SET_SEGMENT (symbolS *s, segT seg)
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- s->bsym->section = seg;
|
|
||||||
+ {
|
|
||||||
+ if (multibyte_handling == multibyte_warn_syms
|
|
||||||
+ && ! s->flags.local_symbol
|
|
||||||
+ && seg != undefined_section
|
|
||||||
+ && ! s->flags.multibyte_warned
|
|
||||||
+ && scan_for_multibyte_characters ((const unsigned char *) s->name,
|
|
||||||
+ (const unsigned char *) s->name + strlen (s->name),
|
|
||||||
+ false))
|
|
||||||
+ {
|
|
||||||
+ as_warn (_("symbol '%s' contains multibyte characters"), s->name);
|
|
||||||
+ s->flags.multibyte_warned = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ s->bsym->section = seg;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
diff -rupN binutils.orig/gas/testsuite/gas/all/gas.exp binutils-2.37/gas/testsuite/gas/all/gas.exp
|
|
||||||
--- binutils.orig/gas/testsuite/gas/all/gas.exp 2021-11-18 16:50:39.101088545 +0000
|
|
||||||
+++ binutils-2.37/gas/testsuite/gas/all/gas.exp 2021-11-18 16:50:42.538075600 +0000
|
|
||||||
@@ -494,3 +494,5 @@ run_dump_test "nop"
|
|
||||||
run_dump_test "asciz"
|
|
||||||
run_dump_test "pr27384"
|
|
||||||
run_dump_test "pr27381"
|
|
||||||
+run_dump_test "multibyte1"
|
|
||||||
+run_dump_test "multibyte2"
|
|
||||||
diff -rupN binutils.orig/testsuite/gas/all/multibyte.s binutils-2.37/testsuite/gas/all/multibyte.s
|
|
||||||
--- binutils.orig/testsuite/gas/all/multibyte.s 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ binutils-2.37/testsuite/gas/all/multibyte.s 2021-11-18 16:50:42.541075589 +0000
|
|
||||||
@@ -0,0 +1,8 @@
|
|
||||||
+ .text
|
|
||||||
+ .globl heoll
|
|
||||||
+heoll:
|
|
||||||
+ .nop
|
|
||||||
+
|
|
||||||
+ .globl hello
|
|
||||||
+hello:
|
|
||||||
+ .nop
|
|
||||||
diff -rupN binutils.orig/testsuite/gas/all/multibyte1.d binutils-2.37/testsuite/gas/all/multibyte1.d
|
|
||||||
--- binutils.orig/testsuite/gas/all/multibyte1.d 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ binutils-2.37/testsuite/gas/all/multibyte1.d 2021-11-18 16:50:42.541075589 +0000
|
|
||||||
@@ -0,0 +1,3 @@
|
|
||||||
+#source: multibyte.s
|
|
||||||
+#as: --multibyte-handling=warn
|
|
||||||
+#warning_output: multibyte1.l
|
|
||||||
diff -rupN binutils.orig/testsuite/gas/all/multibyte1.l binutils-2.37/testsuite/gas/all/multibyte1.l
|
|
||||||
--- binutils.orig/testsuite/gas/all/multibyte1.l 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ binutils-2.37/testsuite/gas/all/multibyte1.l 2021-11-18 16:50:42.541075589 +0000
|
|
||||||
@@ -0,0 +1,12 @@
|
|
||||||
+[^:]*: Assembler messages:
|
|
||||||
+[^:]*: Warning: multibyte character \(0xe2\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0x80\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0xae\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0xe2\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0x80\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0xac\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0xe2\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0x80\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0xae\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: multibyte character \(0xe2\) encountered in .*multibyte.s
|
|
||||||
+[^:]*: Warning: further multibyte character warnings suppressed
|
|
||||||
diff -rupN binutils.orig/testsuite/gas/all/multibyte2.d binutils-2.37/testsuite/gas/all/multibyte2.d
|
|
||||||
--- binutils.orig/testsuite/gas/all/multibyte2.d 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ binutils-2.37/testsuite/gas/all/multibyte2.d 2021-11-18 16:50:42.542075585 +0000
|
|
||||||
@@ -0,0 +1,3 @@
|
|
||||||
+#source: multibyte.s
|
|
||||||
+#as: --multibyte-handling=warn-sym-only
|
|
||||||
+#warning_output: multibyte2.l
|
|
||||||
diff -rupN binutils.orig/testsuite/gas/all/multibyte2.l binutils-2.37/testsuite/gas/all/multibyte2.l
|
|
||||||
--- binutils.orig/testsuite/gas/all/multibyte2.l 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ binutils-2.37/testsuite/gas/all/multibyte2.l 2021-11-18 16:50:42.541075589 +0000
|
|
||||||
@@ -0,0 +1,2 @@
|
|
||||||
+[^:]*: Assembler messages:
|
|
||||||
+[^:]*:3: Warning: symbol '.*' contains multibyte characters
|
|
@ -1,98 +0,0 @@
|
|||||||
--- binutils.orig/ld/ldlang.c 2021-09-17 10:38:18.073366643 +0100
|
|
||||||
+++ binutils-2.37/ld/ldlang.c 2021-09-17 10:50:50.155450530 +0100
|
|
||||||
@@ -6978,7 +6978,8 @@ lang_end (void)
|
|
||||||
if (!bfd_set_start_address (link_info.output_bfd, val))
|
|
||||||
einfo (_("%F%P: can't set start address\n"));
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
+ /* BZ 2004952: Only use the start of the .text section for executables. */
|
|
||||||
+ else if bfd_link_executable (&link_info)
|
|
||||||
{
|
|
||||||
asection *ts;
|
|
||||||
|
|
||||||
@@ -7004,6 +7005,13 @@ lang_end (void)
|
|
||||||
entry_symbol.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ if (warn)
|
|
||||||
+ einfo (_("%P: warning: cannot find entry symbol %s;"
|
|
||||||
+ " not setting start address\n"),
|
|
||||||
+ entry_symbol.name);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -rup binutils.orig/ld/testsuite/ld-arm/tls-gdesc-got.d binutils-2.37/ld/testsuite/ld-arm/tls-gdesc-got.d
|
|
||||||
--- binutils.orig/ld/testsuite/ld-arm/tls-gdesc-got.d 2021-09-29 13:17:21.501277341 +0100
|
|
||||||
+++ binutils-2.37/ld/testsuite/ld-arm/tls-gdesc-got.d 2021-09-29 13:20:04.481132127 +0100
|
|
||||||
@@ -2,7 +2,7 @@
|
|
||||||
.*/tls-lib2-got.so: file format elf32-.*arm.*
|
|
||||||
architecture: arm.*, flags 0x00000150:
|
|
||||||
HAS_SYMS, DYNAMIC, D_PAGED
|
|
||||||
-start address 0x0+8(1e8|220)
|
|
||||||
+start address 0x[0-9a-f]+
|
|
||||||
|
|
||||||
|
|
||||||
Disassembly of section .got:
|
|
||||||
diff -rup binutils.orig/ld/testsuite/ld-i386/tlsnopic.rd binutils-2.37/ld/testsuite/ld-i386/tlsnopic.rd
|
|
||||||
--- binutils.orig/ld/testsuite/ld-i386/tlsnopic.rd 2021-09-29 13:17:21.588276729 +0100
|
|
||||||
+++ binutils-2.37/ld/testsuite/ld-i386/tlsnopic.rd 2021-09-29 13:20:59.456745814 +0100
|
|
||||||
@@ -26,7 +26,7 @@ Key to Flags:
|
|
||||||
#...
|
|
||||||
|
|
||||||
Elf file type is DYN \(Shared object file\)
|
|
||||||
-Entry point 0x1000
|
|
||||||
+Entry point 0x[0-9a-f]+
|
|
||||||
There are [0-9]+ program headers, starting at offset [0-9]+
|
|
||||||
|
|
||||||
Program Headers:
|
|
||||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr14207.d binutils-2.37/ld/testsuite/ld-x86-64/pr14207.d
|
|
||||||
--- binutils.orig/ld/testsuite/ld-x86-64/pr14207.d 2021-09-29 13:17:21.551276989 +0100
|
|
||||||
+++ binutils-2.37/ld/testsuite/ld-x86-64/pr14207.d 2021-09-29 13:21:27.632547838 +0100
|
|
||||||
@@ -5,7 +5,7 @@
|
|
||||||
#target: x86_64-*-linux*
|
|
||||||
|
|
||||||
Elf file type is DYN \(Shared object file\)
|
|
||||||
-Entry point 0x149
|
|
||||||
+Entry point 0x[0-9a-f]+
|
|
||||||
There are 4 program headers, starting at offset 64
|
|
||||||
|
|
||||||
Program Headers:
|
|
||||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlsdesc.rd binutils-2.37/ld/testsuite/ld-x86-64/tlsdesc.rd
|
|
||||||
--- binutils.orig/ld/testsuite/ld-x86-64/tlsdesc.rd 2021-09-29 13:17:21.554276968 +0100
|
|
||||||
+++ binutils-2.37/ld/testsuite/ld-x86-64/tlsdesc.rd 2021-09-29 13:21:47.920405285 +0100
|
|
||||||
@@ -29,7 +29,7 @@ Key to Flags:
|
|
||||||
#...
|
|
||||||
|
|
||||||
Elf file type is DYN \(Shared object file\)
|
|
||||||
-Entry point 0x1000
|
|
||||||
+Entry point 0x[0-9a-f]+
|
|
||||||
There are [0-9]+ program headers, starting at offset [0-9]+
|
|
||||||
|
|
||||||
Program Headers:
|
|
||||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlspic.rd binutils-2.37/ld/testsuite/ld-x86-64/tlspic.rd
|
|
||||||
--- binutils.orig/ld/testsuite/ld-x86-64/tlspic.rd 2021-09-29 13:17:21.546277025 +0100
|
|
||||||
+++ binutils-2.37/ld/testsuite/ld-x86-64/tlspic.rd 2021-09-29 13:22:04.224290720 +0100
|
|
||||||
@@ -29,7 +29,7 @@ Key to Flags:
|
|
||||||
#...
|
|
||||||
|
|
||||||
Elf file type is DYN \(Shared object file\)
|
|
||||||
-Entry point 0x1000
|
|
||||||
+Entry point 0x[0-9a-f]+
|
|
||||||
There are [0-9]+ program headers, starting at offset [0-9]+
|
|
||||||
|
|
||||||
Program Headers:
|
|
||||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlspic2.rd binutils-2.37/ld/testsuite/ld-x86-64/tlspic2.rd
|
|
||||||
--- binutils.orig/ld/testsuite/ld-x86-64/tlspic2.rd 2021-09-29 13:17:21.552276982 +0100
|
|
||||||
+++ binutils-2.37/ld/testsuite/ld-x86-64/tlspic2.rd 2021-09-29 13:22:18.432190887 +0100
|
|
||||||
@@ -30,7 +30,7 @@ Key to Flags:
|
|
||||||
#...
|
|
||||||
|
|
||||||
Elf file type is DYN \(Shared object file\)
|
|
||||||
-Entry point 0x1000
|
|
||||||
+Entry point 0x[0-9a-f]+
|
|
||||||
There are [0-9]+ program headers, starting at offset [0-9]+
|
|
||||||
|
|
||||||
Program Headers:
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -rup binutils.orig/etc/texi2pod.pl binutils-2.37/etc/texi2pod.pl
|
|
||||||
--- binutils.orig/etc/texi2pod.pl 2021-08-10 10:15:38.063964450 +0100
|
|
||||||
+++ binutils-2.37/etc/texi2pod.pl 2021-08-10 16:52:51.705688992 +0100
|
|
||||||
@@ -59,6 +59,8 @@ while ($_ = shift) {
|
|
||||||
$flag = shift;
|
|
||||||
}
|
|
||||||
push (@ipath, $flag);
|
|
||||||
+ } elsif (/^--no-split$/) {
|
|
||||||
+ # ignore option for makeinfo compatibility
|
|
||||||
} elsif (/^-/) {
|
|
||||||
usage();
|
|
||||||
} else {
|
|
@ -1,78 +0,0 @@
|
|||||||
From 92608c3a98e943bb0d43408e84d4f419f87b5f1f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Luca Boccassi <luca.boccassi@gmail.com>
|
|
||||||
Date: Wed, 1 Dec 2021 14:44:25 +0000
|
|
||||||
Subject: [PATCH] readelf: recognize FDO Packaging Metadata ELF note
|
|
||||||
|
|
||||||
As defined on: https://systemd.io/COREDUMP_PACKAGE_METADATA/
|
|
||||||
this note will be used starting from Fedora 36. Allow
|
|
||||||
readelf --notes to pretty print it:
|
|
||||||
|
|
||||||
Displaying notes found in: .note.package
|
|
||||||
Owner Data size Description
|
|
||||||
FDO 0x00000039 FDO_PACKAGING_METADATA
|
|
||||||
Packaging Metadata: {"type":"deb","name":"fsverity-utils","version":"1.3-1"}
|
|
||||||
|
|
||||||
Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
|
|
||||||
(cherry picked from commit e5382207cdddea07c6456fc1c0e6bea73b3d9947)
|
|
||||||
---
|
|
||||||
binutils/readelf.c | 15 +++++++++++++++
|
|
||||||
include/elf/common.h | 3 +++
|
|
||||||
2 files changed, 18 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
|
||||||
index a6073f7ec80..a92dce3114f 100644
|
|
||||||
--- a/binutils/readelf.c
|
|
||||||
+++ b/binutils/readelf.c
|
|
||||||
@@ -18861,6 +18861,8 @@ get_note_type (Filedata * filedata, unsigned e_type)
|
|
||||||
return _("func");
|
|
||||||
case NT_GO_BUILDID:
|
|
||||||
return _("GO BUILDID");
|
|
||||||
+ case FDO_PACKAGING_METADATA:
|
|
||||||
+ return _("FDO_PACKAGING_METADATA");
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -20012,6 +20014,17 @@ print_stapsdt_note (Elf_Internal_Note *pnote)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static bool
|
|
||||||
+print_fdo_note (Elf_Internal_Note * pnote)
|
|
||||||
+{
|
|
||||||
+ if (pnote->descsz > 0 && pnote->type == FDO_PACKAGING_METADATA)
|
|
||||||
+ {
|
|
||||||
+ printf (_(" Packaging Metadata: %.*s\n"), (int) pnote->descsz, pnote->descdata);
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ return false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static const char *
|
|
||||||
get_ia64_vms_note_type (unsigned e_type)
|
|
||||||
{
|
|
||||||
@@ -20741,6 +20754,8 @@ process_note (Elf_Internal_Note * pnote,
|
|
||||||
return print_stapsdt_note (pnote);
|
|
||||||
else if (startswith (pnote->namedata, "CORE"))
|
|
||||||
return print_core_note (pnote);
|
|
||||||
+ else if (startswith (pnote->namedata, "FDO"))
|
|
||||||
+ return print_fdo_note (pnote);
|
|
||||||
else if (((startswith (pnote->namedata, "GA")
|
|
||||||
&& strchr ("*$!+", pnote->namedata[2]) != NULL)
|
|
||||||
|| strchr ("*$!+", pnote->namedata[0]) != NULL)
|
|
||||||
diff --git a/include/elf/common.h b/include/elf/common.h
|
|
||||||
index 0cca28673dd..8ee17c84a97 100644
|
|
||||||
--- a/include/elf/common.h
|
|
||||||
+++ b/include/elf/common.h
|
|
||||||
@@ -953,6 +953,9 @@
|
|
||||||
|
|
||||||
#define NT_FREEBSD_ABI_TAG 1
|
|
||||||
|
|
||||||
+/* Values for FDO .note.package notes as defined on https://systemd.io/COREDUMP_PACKAGE_METADATA/ */
|
|
||||||
+#define FDO_PACKAGING_METADATA 0xcafe1a7e
|
|
||||||
+
|
|
||||||
/* These three macros disassemble and assemble a symbol table st_info field,
|
|
||||||
which contains the symbol binding and symbol type. The STB_ and STT_
|
|
||||||
defines identify the binding and type. */
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
32545
binutils.unicode.patch
32545
binutils.unicode.patch
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user