diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-02-06 00:19:11 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-02-06 00:19:11 +0000 |
commit | 37d8b77856be9eb9581c3c61d3f7193b3aec6b5c (patch) | |
tree | 4dc0065a6aa5f9d46947d27db2b9c83162bf4279 /elf | |
parent | f2b98f97ebc32b68271505131b745289f3255984 (diff) | |
download | glibc-37d8b77856be9eb9581c3c61d3f7193b3aec6b5c.tar.gz glibc-37d8b77856be9eb9581c3c61d3f7193b3aec6b5c.tar.xz glibc-37d8b77856be9eb9581c3c61d3f7193b3aec6b5c.zip |
Update.
* elf/rtld.c (process_dl_debug): Correct printing help message. * elf/dl-misc.c (_dl_debug_vdprintf): Implement precision handling for %s.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-misc.c | 10 | ||||
-rw-r--r-- | elf/rtld.c | 8 |
2 files changed, 14 insertions, 4 deletions
diff --git a/elf/dl-misc.c b/elf/dl-misc.c index ab883acb3c..364940b23f 100644 --- a/elf/dl-misc.c +++ b/elf/dl-misc.c @@ -135,6 +135,7 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg) /* It is a format specifier. */ char fill = ' '; int width = -1; + int prec = -1; #if LONG_MAX != INT_MAX int long_mod = 0; #endif @@ -154,6 +155,13 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg) ++fmt; } + /* Handle precision. */ + if (*fmt == '.' && fmt[1] == '*') + { + prec = va_arg (arg, int); + fmt += 2; + } + /* Recognize the l modifier. It is only important on some platforms where long and int have a different size. We can use the same code for size_t. */ @@ -202,6 +210,8 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg) /* Get the string argument. */ iov[niov].iov_base = va_arg (arg, char *); iov[niov].iov_len = strlen (iov[niov].iov_base); + if (prec != -1) + iov[niov].iov_len = MIN (prec, iov[niov].iov_len ); ++niov; break; diff --git a/elf/rtld.c b/elf/rtld.c index 3241cc9d10..436c81b3b8 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -258,11 +258,11 @@ _dl_start_final (void *arg, struct link_map *bootstrap_map_p, if (phdr[cnt].p_type == PT_TLS) { void *tlsblock; - size_t align = MAX (TLS_INIT_TCB_ALIGN, phdr[cnt].p_align); + size_t align = MAX (TLS_INIT_TCB_ALIGN, phdr[cnt].p_align); GL(dl_rtld_map).l_tls_blocksize = phdr[cnt].p_memsz; GL(dl_rtld_map).l_tls_initimage_size = phdr[cnt].p_filesz; - GL(dl_rtld_map).l_tls_initimage = (void *) (bootstrap_map_p->l_addr + GL(dl_rtld_map).l_tls_initimage = (void *) (GL(dl_rtld_map).l_map_start + phdr[cnt].p_offset); /* We can now allocate the initial TLS block. This can happen @@ -1476,8 +1476,8 @@ warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy); Valid options for the LD_DEBUG environment variable are:\n\n"); for (cnt = 0; cnt < ndebopts; ++cnt) - _dl_printf (" %s%s %s\n", debopts[cnt].name, - " " + strlen (debopts[cnt].name) - 3, + _dl_printf (" %.*s%s%s\n", debopts[cnt].len, debopts[cnt].name, + " " + debopts[cnt].len - 3, debopts[cnt].helptext); _dl_printf ("\n\ |