diff options
author | Joseph Myers <joseph@codesourcery.com> | 2008-07-18 20:49:12 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2008-07-18 20:49:12 +0000 |
commit | a9dc948127c2cb5127cec5ca87dbc19f17dd16cf (patch) | |
tree | 057949f1e00adf29c6a37fccd791d9baf662e2a8 /bfd/elf32-arm.c | |
parent | 0f72fb1c9b6639ae27befa67438ae98f15793525 (diff) | |
download | gdb-a9dc948127c2cb5127cec5ca87dbc19f17dd16cf.zip gdb-a9dc948127c2cb5127cec5ca87dbc19f17dd16cf.tar.gz gdb-a9dc948127c2cb5127cec5ca87dbc19f17dd16cf.tar.bz2 |
bfd:
* 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.
Diffstat (limited to 'bfd/elf32-arm.c')
-rw-r--r-- | bfd/elf32-arm.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 8fbaa35..8fc1542 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -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: |