diff options
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/ldlang.c | 27 | ||||
-rw-r--r-- | ld/ldmisc.c | 25 |
3 files changed, 43 insertions, 15 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 42b4da8..685bbf3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2005-11-18 Alan Modra <amodra@bigpond.net.au> + + * ldlang.c (lang_size_sections_1): Revert 2005-11-16 functional + changes to section alignment. + * ldmisc.c (vfinfo): Handle %ld and %lu. + 2005-11-16 Mark Mitchell <mark@codesourcery.com> * Makefile.am (configdoc.texi): Set top_srcdir in configdoc.texi.. diff --git a/ld/ldlang.c b/ld/ldlang.c index 6972b50..cba7179 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -4137,7 +4137,7 @@ lang_size_sections_1 } else { - bfd_vma savedot; + int align; if (os->addr_tree == NULL) { @@ -4188,20 +4188,25 @@ lang_size_sections_1 } newdot = os->region->current; + align = os->bfd_section->alignment_power; } + else + align = os->section_alignment; /* Align to what the section needs. */ - savedot = newdot; - newdot = align_power (newdot, - os->bfd_section->alignment_power); + if (align > 0) + { + bfd_vma savedot = newdot; + newdot = align_power (newdot, align); - if (newdot != savedot - && (config.warn_section_align - || os->addr_tree != NULL) - && expld.phase != lang_mark_phase_enum) - einfo (_("%P: warning: changing start of section" - " %s by %lu bytes\n"), - os->name, (unsigned long) (newdot - savedot)); + if (newdot != savedot + && (config.warn_section_align + || os->addr_tree != NULL) + && expld.phase != lang_mark_phase_enum) + einfo (_("%P: warning: changing start of section" + " %s by %lu bytes\n"), + os->name, (unsigned long) (newdot - savedot)); + } bfd_set_section_vma (0, os->bfd_section, newdot); diff --git a/ld/ldmisc.c b/ld/ldmisc.c index 4797c29..3ba4221 100644 --- a/ld/ldmisc.c +++ b/ld/ldmisc.c @@ -55,6 +55,8 @@ %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces %X no object output, fail return %d integer, like printf + %ld long, like printf + %lu unsigned long, like printf %s arbitrary string, like printf %u integer, like printf %v hex bfd_vma, no leading zeros @@ -78,10 +80,6 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning) fmt++; switch (*fmt++) { - default: - fprintf (fp, "%%%c", fmt[-1]); - break; - case '%': /* literal % */ putc ('%', fp); @@ -407,6 +405,25 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning) /* unsigned integer, like printf */ fprintf (fp, "%u", va_arg (arg, unsigned int)); break; + + case 'l': + if (*fmt == 'd') + { + fprintf (fp, "%ld", va_arg (arg, long)); + ++fmt; + break; + } + else if (*fmt == 'u') + { + fprintf (fp, "%lu", va_arg (arg, unsigned long)); + ++fmt; + break; + } + /* Fall thru */ + + default: + fprintf (fp, "%%%c", fmt[-1]); + break; } } } |