Add MIPS .module directive
authormfortune <matthew.fortune@imgtec.com>
Tue, 20 May 2014 12:28:20 +0000 (13:28 +0100)
committermfortune <matthew.fortune@imgtec.com>
Tue, 20 May 2014 22:46:43 +0000 (23:46 +0100)
commit919731affbef19fcad8dddb0a595bb05755cb345
treebace9d17f11966117a29ef86360429c4679d3a0b
parent153ff4340d8d2a4ddd53cf953e19aeef3bb7d5dc
Add MIPS .module directive

gas/

* config/tc-mips.c (file_mips_opts_checked): New static global.
(s_module): New static function.
(file_ase): Remove.
(mips_pseudo_table): Add .module handler.
(mips_set_ase): Add opts argument and use instead of mips_opts.
  (md_assemble): Use file_mips_check_options.
(md_parse_option): Update to use file_mips_opts instead of mips_opts.
(mips_set_architecture): Delete function.  Moved to...
(mips_after_parse_args): Here.  All logic now applies to
file_mips_opts first and then copies the final state to mips_opts.
Move error checking and defaults inference to mips_check_options and
file_mips_check_options.
(mips_check_options): New static function.  Common option checking for
command line, .module and .set.  Use .module values in error messages
instead of refering to command line options.
(file_mips_check_options): New static function.  A wrapper for
mips_check_options with file_mips_opts.  Updates BFD arch based on
final options.
(s_mipsset): Split into s_mipsset and parse_code_option.  Settings
supported by both .set and .module are moved to parse_code_option.
Warnings and errors are kept in s_mipsset because when
parse_code_option is used with s_module the warnings are deferred
until code is generated.  Any setting supporting 'default' value is
kept in s_mipsset as it is not applicable to s_module. Inferred
settings are also kept in s_mipsset as s_module does not infer any
settings.  Use mips_check_options.
(parse_code_option): New static function derived from s_mipsset.
(s_module): New static function that implements .module.  Allows file
level settings to be changed until code is generated.
(s_cpload, s_cpsetup, s_cplocal): Use file_mips_check_options.
(s_cprestore, s_cpreturn, s_cpadd, mips_address_bytes): Likewise.
(mips_elf_final_processing): Update file_ase to file_mips_opts.ase.
(md_mips_end): Use file_mips_check_options.
* doc/c-mips.texi: Document .module.

gas/testsuite

* gas/mips/mips.exp: Add new tests.  Use 64-bit ABI for relax-bc1any.
Fix micromips arch definition to use mips64r2 consistently.
* gas/mips/module-defer-warn1.s: New.
* gas/mips/module-defer-warn1.d: New.
* gas/mips/module-defer-warn2.s: New.
* gas/mips/module-defer-warn2.l: New.
* gas/mips/module-override.d: New.
* gas/mips/module-override.s: New.
* gas/mips/mips-gp32-fp64.l: Update expected output.
* gas/mips/mips-gp64-fp32-pic.l: Update expected output.
* gas/mips/mips-gp64-fp32.l: Update expected output.
12 files changed:
gas/config/tc-mips.c
gas/doc/c-mips.texi
gas/testsuite/gas/mips/mips-gp32-fp64.l
gas/testsuite/gas/mips/mips-gp64-fp32-pic.l
gas/testsuite/gas/mips/mips-gp64-fp32.l
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/module-defer-warn1.d [new file with mode: 0644]
gas/testsuite/gas/mips/module-defer-warn1.s [new file with mode: 0644]
gas/testsuite/gas/mips/module-defer-warn2.l [new file with mode: 0644]
gas/testsuite/gas/mips/module-defer-warn2.s [new file with mode: 0644]
gas/testsuite/gas/mips/module-override.d [new file with mode: 0644]
gas/testsuite/gas/mips/module-override.s [new file with mode: 0644]