OSDN Git Service

bfd:
authorJoseph Myers <joseph@codesourcery.com>
Fri, 18 Jul 2008 20:49:12 +0000 (20:49 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 18 Jul 2008 20:49:12 +0000 (20:49 +0000)
* bfd-in.h (bfd_elf32_arm_set_target_relocs): Add new parameter.
* bfd-in2.h: Regenerate.
* elf32-arm.c (struct elf_arm_obj_tdata): Add field
no_wchar_size_warning.
(bfd_elf32_arm_set_target_relocs): Add new parameter
no_wchar_warn.
(elf32_arm_merge_eabi_attributes): Give a warning, not an error,
for conflicting wchar_t attributes.  Do not warn if
--no-wchar-size-warning.  Make diagnostic text more specific.

ld:
* ld.texinfo (--no-wchar-size-warning): Document new ARM option.
* emultempl/armelf.em (no_wchar_size_warning): New.
(arm_elf_create_output_section_statements): Pass
no_wchar_size_warning to arm_elf_create_output_section_statements.
(OPTION_NO_WCHAR_SIZE_WARNING): New.
(PARSE_AND_LIST_LONGOPTS): Add no-wchar-size-warning.
(PARSE_AND_LIST_OPTIONS): List --no-wchar-size-warning.
(PARSE_AND_LIST_ARGS_CASES): Handle --no-wchar-size-warning.

ld/testsuite:
* ld-arm/attr-merge-wchar-0.s,ld-arm/attr-merge-wchar-2.s,
ld-arm/attr-merge-wchar-4.s, ld-arm/attr-merge-wchar-00-nowarn.d,
ld-arm/attr-merge-wchar-00.d, ld-arm/attr-merge-wchar-02-nowarn.d,
ld-arm/attr-merge-wchar-02.d, ld-arm/attr-merge-wchar-04-nowarn.d,
ld-arm/attr-merge-wchar-04.d, ld-arm/attr-merge-wchar-20-nowarn.d,
ld-arm/attr-merge-wchar-20.d, ld-arm/attr-merge-wchar-22-nowarn.d,
ld-arm/attr-merge-wchar-22.d, ld-arm/attr-merge-wchar-24-nowarn.d,
ld-arm/attr-merge-wchar-24.d, ld-arm/attr-merge-wchar-40-nowarn.d,
ld-arm/attr-merge-wchar-40.d, ld-arm/attr-merge-wchar-42-nowarn.d,
ld-arm/attr-merge-wchar-42.d, ld-arm/attr-merge-wchar-44-nowarn.d,
ld-arm/attr-merge-wchar-44.d: New.
* ld-arm/arm-elf.exp: Run new tests.

30 files changed:
bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/elf32-arm.c
ld/ChangeLog
ld/emultempl/armelf.em
ld/ld.texinfo
ld/testsuite/ChangeLog
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/attr-merge-wchar-0.s [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-00.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-02.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-04.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-2.s [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-20.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-22.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-24.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-4.s [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-40.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-42.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d [new file with mode: 0644]
ld/testsuite/ld-arm/attr-merge-wchar-44.d [new file with mode: 0644]

index 4a676b1..fd30fd3 100644 (file)
@@ -1,3 +1,15 @@
+2008-07-18  Joseph Myers  <joseph@codesourcery.com>
+
+       * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add new parameter.
+       * bfd-in2.h: Regenerate.
+       * elf32-arm.c (struct elf_arm_obj_tdata): Add field
+       no_wchar_size_warning.
+       (bfd_elf32_arm_set_target_relocs): Add new parameter
+       no_wchar_warn.
+       (elf32_arm_merge_eabi_attributes): Give a warning, not an error,
+       for conflicting wchar_t attributes.  Do not warn if
+       --no-wchar-size-warning.  Make diagnostic text more specific.
+
 2008-07-18  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/6748
index 3a3fa3f..21f4f4c 100644 (file)
@@ -860,7 +860,7 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation
 
 void bfd_elf32_arm_set_target_relocs
   (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
-   int, int);
+   int, int, int);
 
 extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
   (bfd *, struct bfd_link_info *);
index c1ad8c7..087eff8 100644 (file)
@@ -867,7 +867,7 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation
 
 void bfd_elf32_arm_set_target_relocs
   (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
-   int, int);
+   int, int, int);
 
 extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
   (bfd *, struct bfd_link_info *);
index 8fbaa35..8fc1542 100644 (file)
@@ -2167,6 +2167,9 @@ struct elf_arm_obj_tdata
 
   /* Zero to warn when linking objects with incompatible enum sizes.  */
   int no_enum_size_warning;
+
+  /* Zero to warn when linking objects with incompatible wchar_t sizes.  */
+  int no_wchar_size_warning;
 };
 
 #define elf_arm_tdata(bfd) \
@@ -5271,7 +5274,8 @@ bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
                                  int fix_v4bx,
                                 int use_blx,
                                  bfd_arm_vfp11_fix vfp11_fix,
-                                int no_enum_warn, int pic_veneer)
+                                int no_enum_warn, int no_wchar_warn,
+                                int pic_veneer)
 {
   struct elf32_arm_link_hash_table *globals;
 
@@ -5296,6 +5300,7 @@ bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
 
   BFD_ASSERT (is_arm_elf (output_bfd));
   elf_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
+  elf_arm_tdata (output_bfd)->no_wchar_size_warning = no_wchar_warn;
 }
 
 /* Replace the target offset of a Thumb bl or b.w instruction.  */
@@ -8315,13 +8320,14 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
            out_attr[i].i = in_attr[i].i;
          break;
        case Tag_ABI_PCS_wchar_t:
-         if (out_attr[i].i && in_attr[i].i && out_attr[i].i != in_attr[i].i)
+         if (out_attr[i].i && in_attr[i].i && out_attr[i].i != in_attr[i].i
+             && !elf_arm_tdata (obfd)->no_wchar_size_warning)
            {
              _bfd_error_handler
-               (_("ERROR: %B: Conflicting definitions of wchar_t"), ibfd);
-             return FALSE;
+               (_("warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"),
+                ibfd, in_attr[i].i, out_attr[i].i);
            }
-         if (in_attr[i].i)
+         else if (in_attr[i].i && !out_attr[i].i)
            out_attr[i].i = in_attr[i].i;
          break;
        case Tag_ABI_align8_needed:
index 4c5f7ae..36d8560 100644 (file)
@@ -1,3 +1,14 @@
+2008-07-18  Joseph Myers  <joseph@codesourcery.com>
+
+       * ld.texinfo (--no-wchar-size-warning): Document new ARM option.
+       * emultempl/armelf.em (no_wchar_size_warning): New.
+       (arm_elf_create_output_section_statements): Pass
+       no_wchar_size_warning to arm_elf_create_output_section_statements.
+       (OPTION_NO_WCHAR_SIZE_WARNING): New.
+       (PARSE_AND_LIST_LONGOPTS): Add no-wchar-size-warning.
+       (PARSE_AND_LIST_OPTIONS): List --no-wchar-size-warning.
+       (PARSE_AND_LIST_ARGS_CASES): Handle --no-wchar-size-warning.
+
 2008-07-15  Jie Zhang  <jie.zhang@analog.com>
 
        * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Define.
index d142961..d1d68c0 100644 (file)
@@ -39,6 +39,7 @@ static int fix_v4bx = 0;
 static int use_blx = 0;
 static bfd_arm_vfp11_fix vfp11_denorm_fix = BFD_ARM_VFP11_FIX_DEFAULT;
 static int no_enum_size_warning = 0;
+static int no_wchar_size_warning = 0;
 static int pic_veneer = 0;
 
 static void
@@ -452,6 +453,7 @@ arm_elf_create_output_section_statements (void)
                                   target1_is_rel,
                                   target2_type, fix_v4bx, use_blx,
                                   vfp11_denorm_fix, no_enum_size_warning,
+                                  no_wchar_size_warning,
                                   pic_veneer);
 
   stub_file = lang_add_input_file ("linker stubs",
@@ -509,6 +511,7 @@ PARSE_AND_LIST_PROLOGUE='
 #define OPTION_PIC_VENEER              310
 #define OPTION_FIX_V4BX_INTERWORKING   311
 #define OPTION_STUBGROUP_SIZE           312
+#define OPTION_NO_WCHAR_SIZE_WARNING   313
 '
 
 PARSE_AND_LIST_SHORTOPTS=p
@@ -527,6 +530,7 @@ PARSE_AND_LIST_LONGOPTS='
   { "no-enum-size-warning", no_argument, NULL, OPTION_NO_ENUM_SIZE_WARNING},
   { "pic-veneer", no_argument, NULL, OPTION_PIC_VENEER},
   { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
+  { "no-wchar-size-warning", no_argument, NULL, OPTION_NO_WCHAR_SIZE_WARNING},
 '
 
 PARSE_AND_LIST_OPTIONS='
@@ -541,6 +545,8 @@ PARSE_AND_LIST_OPTIONS='
   fprintf (file, _("  --vfp11-denorm-fix          Specify how to fix VFP11 denorm erratum\n"));
   fprintf (file, _("  --no-enum-size-warning      Don'\''t warn about objects with incompatible"
                   "                                enum sizes\n"));
+  fprintf (file, _("  --no-wchar-size-warning     Don'\''t warn about objects with incompatible"
+                  "                                wchar_t sizes\n"));
   fprintf (file, _("  --pic-veneer                Always generate PIC interworking veneers\n"));
   fprintf (file, _("\
    --stub-group-size=N   Maximum size of a group of input sections that can be\n\
@@ -605,6 +611,10 @@ PARSE_AND_LIST_ARGS_CASES='
       no_enum_size_warning = 1;
       break;
 
+    case OPTION_NO_WCHAR_SIZE_WARNING:
+      no_wchar_size_warning = 1;
+      break;
+
     case OPTION_PIC_VENEER:
       pic_veneer = 1;
       break;
index 4400524..b752642 100644 (file)
@@ -5709,6 +5709,14 @@ linking of an object file using 32-bit enumeration values with another
 using enumeration values fitted into the smallest possible space will
 not be diagnosed.
 
+@cindex NO_WCHAR_SIZE_WARNING
+@kindex --no-wchar-size-warning
+The @option{--no-wchar-size-warning} switch prevents the linker from
+warning when linking object files that specify incompatible EABI
+@code{wchar_t} size attributes.  For example, with this switch enabled,
+linking of an object file using 32-bit @code{wchar_t} values with another
+using 16-bit @code{wchar_t} values will not be diagnosed.
+
 @cindex PIC_VENEER
 @kindex --pic-veneer
 The @samp{--pic-veneer} switch makes the linker use PIC sequences for
index 2403d52..f613aec 100644 (file)
@@ -1,3 +1,18 @@
+2008-07-18  Joseph Myers  <joseph@codesourcery.com>
+
+       * ld-arm/attr-merge-wchar-0.s,ld-arm/attr-merge-wchar-2.s,
+       ld-arm/attr-merge-wchar-4.s, ld-arm/attr-merge-wchar-00-nowarn.d,
+       ld-arm/attr-merge-wchar-00.d, ld-arm/attr-merge-wchar-02-nowarn.d,
+       ld-arm/attr-merge-wchar-02.d, ld-arm/attr-merge-wchar-04-nowarn.d,
+       ld-arm/attr-merge-wchar-04.d, ld-arm/attr-merge-wchar-20-nowarn.d,
+       ld-arm/attr-merge-wchar-20.d, ld-arm/attr-merge-wchar-22-nowarn.d,
+       ld-arm/attr-merge-wchar-22.d, ld-arm/attr-merge-wchar-24-nowarn.d,
+       ld-arm/attr-merge-wchar-24.d, ld-arm/attr-merge-wchar-40-nowarn.d,
+       ld-arm/attr-merge-wchar-40.d, ld-arm/attr-merge-wchar-42-nowarn.d,
+       ld-arm/attr-merge-wchar-42.d, ld-arm/attr-merge-wchar-44-nowarn.d,
+       ld-arm/attr-merge-wchar-44.d: New.
+       * ld-arm/arm-elf.exp: Run new tests.
+
 2008-07-11  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-m68k/got-12.s: Removed.
index 7df49f4..c01c795 100644 (file)
@@ -283,6 +283,24 @@ set armeabitests {
 }
 
 run_ld_link_tests $armeabitests
+run_dump_test "attr-merge-wchar-00"
+run_dump_test "attr-merge-wchar-02"
+run_dump_test "attr-merge-wchar-04"
+run_dump_test "attr-merge-wchar-20"
+run_dump_test "attr-merge-wchar-22"
+run_dump_test "attr-merge-wchar-24"
+run_dump_test "attr-merge-wchar-40"
+run_dump_test "attr-merge-wchar-42"
+run_dump_test "attr-merge-wchar-44"
+run_dump_test "attr-merge-wchar-00-nowarn"
+run_dump_test "attr-merge-wchar-02-nowarn"
+run_dump_test "attr-merge-wchar-04-nowarn"
+run_dump_test "attr-merge-wchar-20-nowarn"
+run_dump_test "attr-merge-wchar-22-nowarn"
+run_dump_test "attr-merge-wchar-24-nowarn"
+run_dump_test "attr-merge-wchar-40-nowarn"
+run_dump_test "attr-merge-wchar-42-nowarn"
+run_dump_test "attr-merge-wchar-44-nowarn"
 run_dump_test "farcall-thumb-thumb"
 run_dump_test "farcall-thumb-thumb-pic-veneer"
 run_dump_test "farcall-thumb-thumb-m-pic-veneer"
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-0.s b/ld/testsuite/ld-arm/attr-merge-wchar-0.s
new file mode 100644 (file)
index 0000000..ef19a88
--- /dev/null
@@ -0,0 +1,11 @@
+       .cpu arm7tdmi
+       .fpu softvfp
+       .eabi_attribute 20, 1
+       .eabi_attribute 21, 1
+       .eabi_attribute 23, 3
+       .eabi_attribute 24, 1
+       .eabi_attribute 25, 1
+       .eabi_attribute 26, 1
+       .eabi_attribute 30, 6
+       .eabi_attribute 18, 0
+       .file   "attr-merge-wchar-0.s"
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d
new file mode 100644 (file)
index 0000000..e850c64
--- /dev/null
@@ -0,0 +1,17 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-00.d b/ld/testsuite/ld-arm/attr-merge-wchar-00.d
new file mode 100644 (file)
index 0000000..1fcf7c0
--- /dev/null
@@ -0,0 +1,17 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d
new file mode 100644 (file)
index 0000000..f6b7a68
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-02.d b/ld/testsuite/ld-arm/attr-merge-wchar-02.d
new file mode 100644 (file)
index 0000000..dc907ee
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d
new file mode 100644 (file)
index 0000000..b369b78
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-04.d b/ld/testsuite/ld-arm/attr-merge-wchar-04.d
new file mode 100644 (file)
index 0000000..9aa3c47
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-0.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-2.s b/ld/testsuite/ld-arm/attr-merge-wchar-2.s
new file mode 100644 (file)
index 0000000..4b3b96b
--- /dev/null
@@ -0,0 +1,11 @@
+       .cpu arm7tdmi
+       .fpu softvfp
+       .eabi_attribute 20, 1
+       .eabi_attribute 21, 1
+       .eabi_attribute 23, 3
+       .eabi_attribute 24, 1
+       .eabi_attribute 25, 1
+       .eabi_attribute 26, 1
+       .eabi_attribute 30, 6
+       .eabi_attribute 18, 2
+       .file   "attr-merge-wchar-2.s"
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d
new file mode 100644 (file)
index 0000000..8cfb682
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-20.d b/ld/testsuite/ld-arm/attr-merge-wchar-20.d
new file mode 100644 (file)
index 0000000..1ba47f1
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d
new file mode 100644 (file)
index 0000000..4a3d37e
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-22.d b/ld/testsuite/ld-arm/attr-merge-wchar-22.d
new file mode 100644 (file)
index 0000000..23c0726
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d
new file mode 100644 (file)
index 0000000..cadd7da
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 2
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-24.d b/ld/testsuite/ld-arm/attr-merge-wchar-24.d
new file mode 100644 (file)
index 0000000..46d6c66
--- /dev/null
@@ -0,0 +1,5 @@
+#source: attr-merge-wchar-2.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r
+#warning: warning: .* uses 4-byte wchar_t yet the output is to use 2-byte wchar_t; use of wchar_t values across objects may fail
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-4.s b/ld/testsuite/ld-arm/attr-merge-wchar-4.s
new file mode 100644 (file)
index 0000000..fdd03f9
--- /dev/null
@@ -0,0 +1,11 @@
+       .cpu arm7tdmi
+       .fpu softvfp
+       .eabi_attribute 20, 1
+       .eabi_attribute 21, 1
+       .eabi_attribute 23, 3
+       .eabi_attribute 24, 1
+       .eabi_attribute 25, 1
+       .eabi_attribute 26, 1
+       .eabi_attribute 30, 6
+       .eabi_attribute 18, 4
+       .file   "attr-merge-wchar-4.s"
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d
new file mode 100644 (file)
index 0000000..9d6e040
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-40.d b/ld/testsuite/ld-arm/attr-merge-wchar-40.d
new file mode 100644 (file)
index 0000000..fcf9b54
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-0.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d
new file mode 100644 (file)
index 0000000..8dbc442
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-42.d b/ld/testsuite/ld-arm/attr-merge-wchar-42.d
new file mode 100644 (file)
index 0000000..c2aca5e
--- /dev/null
@@ -0,0 +1,5 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-2.s
+#as:
+#ld: -r
+#warning: warning: .* uses 2-byte wchar_t yet the output is to use 4-byte wchar_t; use of wchar_t values across objects may fail
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d b/ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d
new file mode 100644 (file)
index 0000000..7566d2a
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r --no-wchar-size-warning
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge-wchar-44.d b/ld/testsuite/ld-arm/attr-merge-wchar-44.d
new file mode 100644 (file)
index 0000000..430de30
--- /dev/null
@@ -0,0 +1,18 @@
+#source: attr-merge-wchar-4.s
+#source: attr-merge-wchar-4.s
+#as:
+#ld: -r
+#readelf: -A
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_name: "ARM7TDMI"
+  Tag_CPU_arch: v4T
+  Tag_ABI_PCS_wchar_t: 4
+  Tag_ABI_FP_denormal: Needed
+  Tag_ABI_FP_exceptions: Needed
+  Tag_ABI_FP_number_model: IEEE 754
+  Tag_ABI_align8_needed: Yes
+  Tag_ABI_align8_preserved: Yes, except leaf SP
+  Tag_ABI_enum_size: small
+  Tag_ABI_optimization_goals: Aggressive Debug