Output "warning:" or "error:" in plugin messages

When plugin generates LDPL_WARNING, LDPL_FATAL and LDPL_ERROR messages,
linker should display "warning:" or "error:" in plugin messages like
regular linker messages.

ld/

	* plugin.c (message): Output "warning:" for LDPL_WARNING. Output
	"error:" for LDPL_FATAL and LDPL_ERROR.
	* testplug2.c (parse_option): Handle fatal, error and warning.

ld/testsuite/

	* ld-plugin/plugin-27.d: New.
	* ld-plugin/plugin-28.d: Likewise.
	* ld-plugin/plugin-29.d: Likewise.
	* plugin.exp (plugin_tests): Add tests for LDPL_FATAL, LDPL_ERROR
	and LDPL_WARNING.
This commit is contained in:
H.J. Lu 2015-02-11 12:16:07 -08:00
parent e3001fd920
commit 45e813544e
8 changed files with 47 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2015-02-11 H.J. Lu <hongjiu.lu@intel.com>
* plugin.c (message): Output "warning:" for LDPL_WARNING. Output
"error:" for LDPL_FATAL and LDPL_ERROR.
* testplug2.c (parse_option): Handle fatal, error and warning.
2015-02-11 H.J. Lu <hongjiu.lu@intel.com>
* testplug2.c (dump_tv_tag): Removed.

View File

@ -814,15 +814,19 @@ message (int level, const char *format, ...)
putchar ('\n');
break;
case LDPL_WARNING:
vfinfo (stdout, format, args, TRUE);
putchar ('\n');
{
char *newfmt = ACONCAT (("%P: warning: ", format, "\n",
(const char *) NULL));
vfinfo (stdout, newfmt, args, TRUE);
}
break;
case LDPL_FATAL:
case LDPL_ERROR:
default:
{
char *newfmt = ACONCAT ((level == LDPL_FATAL ? "%P%F: " : "%P%X: ",
format, "\n", (const char *) NULL));
char *newfmt = ACONCAT ((level == LDPL_FATAL ? "%P%F" : "%P%X",
": error: ", format, "\n",
(const char *) NULL));
fflush (stdout);
vfinfo (stderr, newfmt, args, TRUE);
fflush (stderr);

View File

@ -318,7 +318,22 @@ set_register_hook (const char *whichhook, bfd_boolean yesno)
static enum ld_plugin_status
parse_option (const char *opt)
{
if (!strncmp ("fail", opt, 4))
if (!strncmp ("fatal", opt, 5))
{
TV_MESSAGE (LDPL_FATAL, "Fatal error");
fflush (NULL);
}
else if (!strncmp ("error", opt, 5))
{
TV_MESSAGE (LDPL_ERROR, "Error");
fflush (NULL);
}
else if (!strncmp ("warning", opt, 7))
{
TV_MESSAGE (LDPL_WARNING, "Warning");
fflush (NULL);
}
else if (!strncmp ("fail", opt, 4))
return set_ret_val (opt + 4, LDPS_ERR);
else if (!strncmp ("pass", opt, 4))
return set_ret_val (opt + 4, LDPS_OK);

View File

@ -1,3 +1,11 @@
2015-02-11 H.J. Lu <hongjiu.lu@intel.com>
* ld-plugin/plugin-27.d: New.
* ld-plugin/plugin-28.d: Likewise.
* ld-plugin/plugin-29.d: Likewise.
* plugin.exp (plugin_tests): Add tests for LDPL_FATAL, LDPL_ERROR
and LDPL_WARNING.
2015-02-11 H.J. Lu <hongjiu.lu@intel.com>
PR ld/17878

View File

@ -0,0 +1 @@
.*: error: Fatal error

View File

@ -0,0 +1 @@
.*: error: Error

View File

@ -0,0 +1 @@
.*: warning: Warning

View File

@ -168,6 +168,12 @@ set plugin_tests [list \
$testsrcfiles $libs" "" "" "" {{ld plugin-17.d}} "main.x" ] \
[list "load plugin with source not claimed" "-plugin $plugin_path $regclm \
$testsrcfiles $libs" "" "" "" {{ld plugin-26.d}} "main.x" ] \
[list "plugin fatal error" "-plugin $plugin2_path -plugin-opt fatal \
$testobjfiles $libs" "" "" "" {{ld plugin-27.d}} "main.x" ] \
[list "plugin error" "-plugin $plugin2_path -plugin-opt error \
$testobjfiles $libs" "" "" "" {{ld plugin-28.d}} "main.x" ] \
[list "plugin warning" "-plugin $plugin2_path -plugin-opt warning \
$testobjfiles $libs" "" "" "" {{ld plugin-29.d}} "main.x" ] \
]
set plugin_lib_tests [list \