ld: optimize vfinfo output slightly
ld atm ends up calling the write() syscall on every char when displaying an error message. For example: $ echo 'main(){foo();}' | strace -f -ewrite gcc -x c -o /dev/null - ... [pid 13035] write(2, ":", 1) = 1 [pid 13035] write(2, " ", 1) = 1 [pid 13035] write(2, "I", 1) = 1 [pid 13035] write(2, "n", 1) = 1 [pid 13035] write(2, " ", 1) = 1 [pid 13035] write(2, "f", 1) = 1 [pid 13035] write(2, "u", 1) = 1 [pid 13035] write(2, "n", 1) = 1 [pid 13035] write(2, "c", 1) = 1 [pid 13035] write(2, "t", 1) = 1 [pid 13035] write(2, "i", 1) = 1 [pid 13035] write(2, "o", 1) = 1 [pid 13035] write(2, "n", 1) = 1 [pid 13035] write(2, " ", 1) = 1 [pid 13035] write(2, "`", 1) = 1 ... That's just to write ": In function `main':". A slight optimization in the vfinfo() func gives a much more reasonable syscall footprint: ... write(2, ": In function `", 15) = 15 ... Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
b1c0804b2e
commit
23916fffce
@ -1,3 +1,9 @@
|
|||||||
|
2012-04-02 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
|
* ldmisc.c (vfinfo): Assign new local str to fmt. Delete
|
||||||
|
putc call. If str and fmt are different, call fwrite on
|
||||||
|
the difference.
|
||||||
|
|
||||||
2012-03-30 Nick Clifton <nickc@redhat.com>
|
2012-03-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* po/vi.po: Updated Vietnamese translation.
|
* po/vi.po: Updated Vietnamese translation.
|
||||||
|
@ -72,10 +72,13 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
|
|||||||
|
|
||||||
while (*fmt != '\0')
|
while (*fmt != '\0')
|
||||||
{
|
{
|
||||||
|
const char *str = fmt;
|
||||||
while (*fmt != '%' && *fmt != '\0')
|
while (*fmt != '%' && *fmt != '\0')
|
||||||
{
|
|
||||||
putc (*fmt, fp);
|
|
||||||
fmt++;
|
fmt++;
|
||||||
|
if (fmt != str)
|
||||||
|
if (fwrite (str, 1, fmt - str, fp))
|
||||||
|
{
|
||||||
|
/* Ignore. */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*fmt == '%')
|
if (*fmt == '%')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user