mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
bfd/
* 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. ld/ * 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.
This commit is contained in:
parent
cb2eed6375
commit
bf21ed7807
@ -1,3 +1,15 @@
|
||||
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
|
||||
|
@ -902,7 +902,8 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation
|
||||
(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 *);
|
||||
|
@ -909,7 +909,8 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation
|
||||
(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 *);
|
||||
|
@ -2064,6 +2064,9 @@ struct elf32_arm_obj_tdata
|
||||
|
||||
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) \
|
||||
@ -3858,12 +3861,14 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *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;
|
||||
|
||||
@ -3884,6 +3889,8 @@ bfd_elf32_arm_set_target_relocs (struct bfd_link_info *link_info,
|
||||
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
|
||||
@ -7193,10 +7200,15 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
|
||||
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;
|
||||
|
12
ld/ChangeLog
12
ld/ChangeLog
@ -1,3 +1,15 @@
|
||||
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.
|
||||
|
@ -36,6 +36,7 @@ static char *target2_type = "${TARGET2_TYPE}";
|
||||
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)
|
||||
@ -233,13 +234,14 @@ arm_elf_finish (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
|
||||
@ -256,6 +258,7 @@ PARSE_AND_LIST_PROLOGUE='
|
||||
#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
|
||||
@ -270,6 +273,7 @@ PARSE_AND_LIST_LONGOPTS='
|
||||
{ "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='
|
||||
@ -281,6 +285,7 @@ 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='
|
||||
@ -326,6 +331,10 @@ 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
|
||||
|
@ -5519,6 +5519,15 @@ instruction. The original instruction is then replaced with a branch to
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user