This adds support for marking RL78 binaries as either supporting 32-bit
or 64-bit doubles. It also makes the linker complain if the user attempts to link together binaries with different sized doubles. * elf32-rl78.c (rl78_elf_merge_private_bfd_data): Complain if 64-bit doubles objects mix with 32-bit doubles objects. (rl78_elf_print_private_bfd_data): Describe 64-bit doubles flag. * readelf.c (get_machine_flags): Handle RL78 64-bit doubles flag. * config/tc-rl78.c (enum options): Add OPTION_32BIT_DOUBLES and OPTION_64BIT_DOUBLES. (md_longopts): Add -m32bit-doubles and -m64bit-doubles. (md_parse_option): Parse -m32bit-doubles and -m64bit-doubles. (md_show_usage): Show all of the RL78 options. (rl78_float_cons): New static functions. (md_pseudo_table): Update handler for "double".
This commit is contained in:
parent
73eb770959
commit
856ea05ccf
@ -1,3 +1,9 @@
|
||||
2014-05-16 Kaushik Phata <Kaushik.Phatak@kpit.com>
|
||||
|
||||
* elf32-rl78.c (rl78_elf_merge_private_bfd_data): Complain if
|
||||
64-bit doubles objects mix with 32-bit doubles objects.
|
||||
(rl78_elf_print_private_bfd_data): Describe 64-bit doubles flag.
|
||||
|
||||
2014-05-08 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* mmo.c: Update URLs in documentation comments.
|
||||
|
@ -1049,6 +1049,19 @@ rl78_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
|
||||
(*_bfd_error_handler) (_("- %s is G10, %s is not"),
|
||||
bfd_get_filename (ibfd), bfd_get_filename (obfd));
|
||||
}
|
||||
|
||||
if (changed_flags & E_FLAG_RL78_64BIT_DOUBLES)
|
||||
{
|
||||
(*_bfd_error_handler)
|
||||
(_("RL78 merge conflict: cannot link 32-bit and 64-bit objects together"));
|
||||
|
||||
if (old_flags & E_FLAG_RL78_64BIT_DOUBLES)
|
||||
(*_bfd_error_handler) (_("- %s is 64-bit, %s is not"),
|
||||
bfd_get_filename (obfd), bfd_get_filename (ibfd));
|
||||
else
|
||||
(*_bfd_error_handler) (_("- %s is 64-bit, %s is not"),
|
||||
bfd_get_filename (ibfd), bfd_get_filename (obfd));
|
||||
}
|
||||
}
|
||||
|
||||
return !error;
|
||||
@ -1071,6 +1084,9 @@ rl78_elf_print_private_bfd_data (bfd * abfd, void * ptr)
|
||||
if (flags & E_FLAG_RL78_G10)
|
||||
fprintf (file, _(" [G10]"));
|
||||
|
||||
if (flags & E_FLAG_RL78_64BIT_DOUBLES)
|
||||
fprintf (file, _(" [64-bit doubles]"));
|
||||
|
||||
fputc ('\n', file);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-05-16 Kaushik Phata <Kaushik.Phatak@kpit.com>
|
||||
|
||||
* readelf.c (get_machine_flags): Handle RL78 64-bit doubles flag.
|
||||
|
||||
2014-05-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* emul_aix.c: Update bfd target vector naming.
|
||||
|
@ -3009,6 +3009,8 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
||||
case EM_RL78:
|
||||
if (e_flags & E_FLAG_RL78_G10)
|
||||
strcat (buf, ", G10");
|
||||
if (e_flags & E_FLAG_RL78_64BIT_DOUBLES)
|
||||
strcat (buf, ", 64-bit doubles");
|
||||
break;
|
||||
|
||||
case EM_RX:
|
||||
|
@ -1,3 +1,15 @@
|
||||
2014-05-16 Kaushik Phata <Kaushik.Phatak@kpit.com>
|
||||
|
||||
* config/tc-rl78.c (enum options): Add OPTION_32BIT_DOUBLES
|
||||
and OPTION_64BIT_DOUBLES.
|
||||
(md_longopts): Add -m32bit-doubles and -m64bit-doubles.
|
||||
(md_parse_option): Parse -m32bit-doubles and -m64bit-doubles.
|
||||
(md_show_usage): Show all of the RL78 options.
|
||||
(rl78_float_cons): New static functions.
|
||||
(md_pseudo_table): Update handler for "double".
|
||||
* doc/c-rl78.texi: Document new options.
|
||||
* doc/as.texinfo: Likewise.
|
||||
|
||||
2014-05-13 Matthew Fortune <matthew.fortune@imgtec.com>
|
||||
|
||||
* config/tc-mips.c (mips_set_options): Rename gp32 to gp throughout.
|
||||
|
@ -282,6 +282,8 @@ enum options
|
||||
{
|
||||
OPTION_RELAX = OPTION_MD_BASE,
|
||||
OPTION_G10,
|
||||
OPTION_32BIT_DOUBLES,
|
||||
OPTION_64BIT_DOUBLES,
|
||||
};
|
||||
|
||||
#define RL78_SHORTOPTS ""
|
||||
@ -292,6 +294,8 @@ struct option md_longopts[] =
|
||||
{
|
||||
{"relax", no_argument, NULL, OPTION_RELAX},
|
||||
{"mg10", no_argument, NULL, OPTION_G10},
|
||||
{"m32bit-doubles", no_argument, NULL, OPTION_32BIT_DOUBLES},
|
||||
{"m64bit-doubles", no_argument, NULL, OPTION_64BIT_DOUBLES},
|
||||
{NULL, no_argument, NULL, 0}
|
||||
};
|
||||
size_t md_longopts_size = sizeof (md_longopts);
|
||||
@ -308,6 +312,14 @@ md_parse_option (int c, char * arg ATTRIBUTE_UNUSED)
|
||||
case OPTION_G10:
|
||||
elf_flags |= E_FLAG_RL78_G10;
|
||||
return 1;
|
||||
|
||||
case OPTION_32BIT_DOUBLES:
|
||||
elf_flags &= ~ E_FLAG_RL78_64BIT_DOUBLES;
|
||||
return 1;
|
||||
|
||||
case OPTION_64BIT_DOUBLES:
|
||||
elf_flags |= E_FLAG_RL78_64BIT_DOUBLES;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -315,9 +327,12 @@ md_parse_option (int c, char * arg ATTRIBUTE_UNUSED)
|
||||
void
|
||||
md_show_usage (FILE * stream ATTRIBUTE_UNUSED)
|
||||
{
|
||||
fprintf (stream, _(" RL78 specific command line options:\n"));
|
||||
fprintf (stream, _(" --mg10 Enable support for G10 variant\n"));
|
||||
fprintf (stream, _(" --m32bit-doubles [default]\n"));
|
||||
fprintf (stream, _(" --m64bit-doubles\n"));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
s_bss (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
@ -328,15 +343,23 @@ s_bss (int ignore ATTRIBUTE_UNUSED)
|
||||
demand_empty_rest_of_line ();
|
||||
}
|
||||
|
||||
static void
|
||||
rl78_float_cons (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (elf_flags & E_FLAG_RL78_64BIT_DOUBLES)
|
||||
return float_cons ('d');
|
||||
return float_cons ('f');
|
||||
}
|
||||
|
||||
/* The target specific pseudo-ops which we support. */
|
||||
const pseudo_typeS md_pseudo_table[] =
|
||||
{
|
||||
/* Our "standard" pseudos. */
|
||||
{ "double", float_cons, 'd' },
|
||||
{ "bss", s_bss, 0 },
|
||||
{ "3byte", cons, 3 },
|
||||
{ "int", cons, 4 },
|
||||
{ "word", cons, 4 },
|
||||
/* Our "standard" pseudos. */
|
||||
{ "double", rl78_float_cons, 'd' },
|
||||
{ "bss", s_bss, 0 },
|
||||
{ "3byte", cons, 3 },
|
||||
{ "int", cons, 4 },
|
||||
{ "word", cons, 4 },
|
||||
|
||||
/* End of list marker. */
|
||||
{ NULL, NULL, 0 }
|
||||
|
@ -479,6 +479,12 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
|
||||
[@b{-msolaris}|@b{-mno-solaris}]
|
||||
[@b{-nops=@var{count}}]
|
||||
@end ifset
|
||||
@ifset RL78
|
||||
|
||||
@emph{Target RL78 options:}
|
||||
[@b{-mg10}]
|
||||
[@b{-m32bit-doubles}|@b{-m64bit-doubles}]
|
||||
@end ifset
|
||||
@ifset RX
|
||||
|
||||
@emph{Target RX options:}
|
||||
|
@ -32,6 +32,14 @@ Enable support for link-time relaxation.
|
||||
Mark the generated binary as targeting the G10 variant of the RL78
|
||||
architecture.
|
||||
|
||||
@item m32bit-doubles
|
||||
Mark the generated binary as one that uses 32-bits to hold the
|
||||
@code{double} floating point type. This is the default.
|
||||
|
||||
@item m64bit-doubles
|
||||
Mark the generated binary as one that uses 64-bits to hold the
|
||||
@code{double} floating point type.
|
||||
|
||||
@end table
|
||||
|
||||
@node RL78-Modifiers
|
||||
@ -85,8 +93,10 @@ In addition to the common directives, the RL78 adds these:
|
||||
@table @code
|
||||
|
||||
@item .double
|
||||
Output a constant in ``double'' format, which is a 32-bit floating
|
||||
point value on RL78.
|
||||
Output a constant in ``double'' format, which is either a 32-bit
|
||||
or a 64-bit floating point value, depending upon the setting of the
|
||||
@option{-m32bit-doubles}|@option{-m64bit-doubles} command line
|
||||
option.
|
||||
|
||||
@item .bss
|
||||
Select the BSS section.
|
||||
|
Loading…
Reference in New Issue
Block a user