+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add "bfd *"
+ argument and extra last argument.
+ * bfd-in2.h: Regenerate.
+ * elf32-arm.c (elf32_arm_obj_tdata): Add no_enum_size_warning
+ member.
+ (bfd_elf32_arm_set_target_relocs): Add "bfd *" argument and
+ extra last argument. Set no_enum_size_warning appropriately.
+ (elf32_arm_merge_eabi_attributes): Improve enum sizes
+ diagnostic, suppressing it when no_enum_size_warning dictates.
+
2007-03-20 Nick Clifton <nickc@redhat.com>
PR binutils/3535
(bfd *, struct bfd_link_info *);
void bfd_elf32_arm_set_target_relocs
- (struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix);
+ (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
+ int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);
(bfd *, struct bfd_link_info *);
void bfd_elf32_arm_set_target_relocs
- (struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix);
+ (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
+ int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);
aeabi_attribute known_eabi_attributes[NUM_KNOWN_ATTRIBUTES];
aeabi_attribute_list *other_eabi_attributes;
+
+ /* Zero to warn when linking objects with incompatible enum sizes. */
+ int no_enum_size_warning;
};
#define elf32_arm_tdata(abfd) \
/* Set target relocation values needed during linking. */
void
-bfd_elf32_arm_set_target_relocs (struct bfd_link_info *link_info,
+bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
+ struct bfd_link_info *link_info,
int target1_is_rel,
char * target2_type,
int fix_v4bx,
int use_blx,
- bfd_arm_vfp11_fix vfp11_fix)
+ bfd_arm_vfp11_fix vfp11_fix,
+ int no_enum_warn)
{
struct elf32_arm_link_hash_table *globals;
globals->fix_v4bx = fix_v4bx;
globals->use_blx |= use_blx;
globals->vfp11_fix = vfp11_fix;
+
+ elf32_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
}
/* The thumb form of a long branch is a bit finicky, because the offset
out_attr[i].i = in_attr[i].i;
}
else if (in_attr[i].i != AEABI_enum_forced_wide
- && out_attr[i].i != in_attr[i].i)
+ && out_attr[i].i != in_attr[i].i
+ && !elf32_arm_tdata (obfd)->no_enum_size_warning)
{
+ const char *aeabi_enum_names[] =
+ { "", "variable-size", "32-bit", "" };
_bfd_error_handler
- (_("ERROR: %B: Conflicting enum sizes"), ibfd);
+ (_("warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"),
+ ibfd, aeabi_enum_names[in_attr[i].i],
+ aeabi_enum_names[out_attr[i].i]);
}
}
break;
+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld.texinfo: Document --no-enum-size-warning.
+ * emultempl/armelf.em (no_enum_size_warning): New.
+ (arm_elf_create_output_section_statements): Correct typo
+ in comment. Pass no_enum_size_warning to
+ bfd_elf32_arm_set_target_relocs.
+ (PARSE_AND_LIST_PROLOGUE): Define OPTION_NO_ENUM_SIZE_WARNING.
+ (PARSE_AND_LIST_OPTIONS): Document --no-enum-size-warning.
+ (PARSE_AND_LIST_ARGS_CASES): Add OPTION_NO_ENUM_SIZE_WARNING
+ case.
+
2007-03-19 Bernd Schmidt <bernd.schmidt@analog.com>
* configure.tgt (bfin-*-elf, bfin-*-uclinux*): Add targ_extra_libpath.
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 void
gld${EMULATION_NAME}_before_parse (void)
thumb_entry_symbol);
}
-/* This is a convenitent point to tell BFD about target specific flags.
+/* This is a convenient point to tell BFD about target specific flags.
After the output has been created, but before inputs are read. */
static void
arm_elf_create_output_section_statements (void)
{
- bfd_elf32_arm_set_target_relocs (&link_info, target1_is_rel, target2_type,
- fix_v4bx, use_blx, vfp11_denorm_fix);
+ bfd_elf32_arm_set_target_relocs (output_bfd, &link_info, target1_is_rel,
+ target2_type, fix_v4bx, use_blx,
+ vfp11_denorm_fix, no_enum_size_warning);
}
EOF
#define OPTION_FIX_V4BX 306
#define OPTION_USE_BLX 307
#define OPTION_VFP11_DENORM_FIX 308
+#define OPTION_NO_ENUM_SIZE_WARNING 309
'
PARSE_AND_LIST_SHORTOPTS=p
{ "fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX},
{ "use-blx", no_argument, NULL, OPTION_USE_BLX},
{ "vfp11-denorm-fix", required_argument, NULL, OPTION_VFP11_DENORM_FIX},
+ { "no-enum-size-warning", no_argument, NULL, OPTION_NO_ENUM_SIZE_WARNING},
'
PARSE_AND_LIST_OPTIONS='
fprintf (file, _(" --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"));
fprintf (file, _(" --use-blx Enable use of BLX instructions\n"));
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"));
'
PARSE_AND_LIST_ARGS_CASES='
else
einfo (_("Unrecognized VFP11 fix type '\''%s'\''.\n"), optarg);
break;
+
+ case OPTION_NO_ENUM_SIZE_WARNING:
+ no_enum_size_warning = 1;
+ break;
'
# We have our own after_open and before_allocation functions, but they call
the veneer. The extra cycles required to call and return from the veneer
are sufficient to avoid the erratum in both the scalar and vector cases.
+@cindex NO_ENUM_SIZE_WARNING
+@kindex --no-enum-size-warning
+The @samp{--no-enum-size-warning} switch prevents the linker from
+warning when linking object files that specify incompatible EABI
+enumeration size attributes. For example, with this switch enabled,
+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.
+
@ifclear GENERIC
@lowersections
@end ifclear