aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2006-10-29 19:07:54 +0000
committerH.J. Lu <hjl.tools@gmail.com>2006-10-29 19:07:54 +0000
commitf8eae8b28b412fc8d9c8bad1961447652a306dd2 (patch)
tree7b39dbbce6990ef9b39b5d94910f2df89b0d9cc8 /binutils
parente2785c4472a06867e3ddbd11a5609d3f1a9e0f32 (diff)
downloadgdb-f8eae8b28b412fc8d9c8bad1961447652a306dd2.zip
gdb-f8eae8b28b412fc8d9c8bad1961447652a306dd2.tar.gz
gdb-f8eae8b28b412fc8d9c8bad1961447652a306dd2.tar.bz2
2006-10-29 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/3384 * configure.in (AC_CHECK_HEADERS): Add limits.h and sys/param.h. * configure: Regenerated. * config.in: Likewise. * readelf.c: Include <limits.h> and <sys/param.h> for PATH_MAX. (program_interpreter): Allocate PATH_MAX bytes instead of 64. (process_program_headers): Don't assume that program interpreter is shorter than 64 characters.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog12
-rwxr-xr-xbinutils/configure4
-rw-r--r--binutils/configure.in2
-rw-r--r--binutils/readelf.c29
4 files changed, 43 insertions, 4 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index d82cd78..7b935d9 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,15 @@
+2006-10-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3384
+ * configure.in (AC_CHECK_HEADERS): Add limits.h and sys/param.h.
+ * configure: Regenerated.
+ * config.in: Likewise.
+
+ * readelf.c: Include <limits.h> and <sys/param.h> for PATH_MAX.
+ (program_interpreter): Allocate PATH_MAX bytes instead of 64.
+ (process_program_headers): Don't assume that program interpreter
+ is shorter than 64 characters.
+
2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
Yukishige Shibata <shibata@rd.scei.sony.co.jp>
Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
diff --git a/binutils/configure b/binutils/configure
index 83e632d..4124830 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -6425,7 +6425,9 @@ done
-for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h
+
+
+for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h sys/param.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if eval "test \"\${$as_ac_Header+set}\" = set"; then
diff --git a/binutils/configure.in b/binutils/configure.in
index 7b63f4d..f2f3db8 100644
--- a/binutils/configure.in
+++ b/binutils/configure.in
@@ -80,7 +80,7 @@ case "${host}" in
esac
AC_SUBST(DEMANGLER_NAME)
-AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h)
+AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h sys/param.h)
AC_HEADER_SYS_WAIT
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(sbrk utimes setmode getc_unlocked strcoll)
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 04490fe..9e015e2 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -47,6 +47,25 @@
#include <stdio.h>
#include <time.h>
+/* for PATH_MAX */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifndef PATH_MAX
+/* for MAXPATHLEN */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# endif
+# ifndef PATH_MAX
+# ifdef MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+# else
+# define PATH_MAX 1024
+# endif
+# endif
+#endif
+
#if __GNUC__ >= 2
/* Define BFD64 here, even if our default architecture is 32 bit ELF
as this will allow us to read in and parse 64bit and 32bit ELF files.
@@ -135,7 +154,7 @@ static Elf_Internal_Sym *dynamic_symbols;
static Elf_Internal_Syminfo *dynamic_syminfo;
static unsigned long dynamic_syminfo_offset;
static unsigned int dynamic_syminfo_nent;
-static char program_interpreter[64];
+static char program_interpreter[PATH_MAX];
static bfd_vma dynamic_info[DT_JMPREL + 1];
static bfd_vma dynamic_info_DT_GNU_HASH;
static bfd_vma version_info[16];
@@ -3492,8 +3511,14 @@ process_program_headers (FILE *file)
error (_("Unable to find program interpreter name\n"));
else
{
+ char fmt [32];
+ int ret = snprintf (fmt, sizeof (fmt), "%%%ds", PATH_MAX);
+
+ if (ret >= (int) sizeof (fmt) || ret < 0)
+ error (_("Internal error: failed to create format string to display program interpreter"));
+
program_interpreter[0] = 0;
- fscanf (file, "%63s", program_interpreter);
+ fscanf (file, fmt, program_interpreter);
if (do_segments)
printf (_("\n [Requesting program interpreter: %s]"),