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:
Kaushik Phata 2014-05-16 14:57:10 +01:00 committed by Nick Clifton
parent 73eb770959
commit 856ea05ccf
8 changed files with 88 additions and 9 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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.

View File

@ -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:

View File

@ -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.

View File

@ -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 }

View File

@ -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:}

View File

@ -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.