From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12697 invoked by alias); 1 Jun 2011 16:18:15 -0000 Received: (qmail 12686 invoked by uid 22791); 1 Jun 2011 16:18:12 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,TW_CP,TW_RG,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp.gentoo.org (HELO smtp.gentoo.org) (140.211.166.183) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 01 Jun 2011 16:17:57 +0000 Received: from vapier.localnet (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id 2DCD41BC003; Wed, 1 Jun 2011 16:17:57 +0000 (UTC) From: Mike Frysinger To: Tom Tromey Subject: [PATCH/RFC] new argv handlers to help with sim argv building Date: Wed, 01 Jun 2011 16:18:00 -0000 User-Agent: KMail/1.13.7 (Linux/2.6.39; KDE/4.6.3; x86_64; ; ) Cc: gdb-patches@sourceware.org, toolchain-devel@blackfin.uclinux.org References: <1306440200-25087-1-git-send-email-vapier__8251.52545371584$1306440225$gmane$org@gentoo.org> In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2706616.YIMqJsBGZm"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <201106011217.55915.vapier@gentoo.org> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-06/txt/msg00009.txt.bz2 --nextPart2706616.YIMqJsBGZm Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 4153 On Friday, May 27, 2011 13:46:59 Tom Tromey wrote: > Offhand it seems like it would be better if this code directly built > sim_argv rather than building a string and converting it, but I don't > know if any odd issue is lurking. i slapped this together. what do you think (ignoring missing docs) ? -mike --- libiberty/argv.c 13 Aug 2010 11:36:10 -0000 1.22 +++ libiberty/argv.c 1 Jun 2011 16:17:06 -0000 @@ -301,6 +301,56 @@ char **buildargv (const char *input) return (argv); } =20 +char **appendargv (char **argv, const char *arg, ...) +{ + va_list ap; + int argc; + + for (argc =3D 0; argv[argc]; ++argc) + continue; + + va_start (ap, arg); + while (arg) + { + argv =3D (char **) realloc (argv, sizeof (*argv) * (argc + 2)); + argv[argc] =3D strdup (arg); + ++argc; + arg =3D va_arg (ap, const char *); + } + va_end (ap); + + if (argv) + argv[argc] =3D NULL; + + return argv; +} + +char **mergeargv (char **iargv, ...) +{ + va_list ap; + char **argv =3D NULL; + int i, argc =3D 0; + + va_start (ap, iargv); + while (iargv) + { + for (i =3D 0; iargv[i]; ++i) + { + argv =3D (char **) realloc (argv, sizeof (*argv) * (argc + 2)); + argv[argc] =3D strdup (iargv[i]); + ++argc; + } + + iargv =3D va_arg (ap, char **); + } + va_end (ap); + + if (argv) + argv[argc] =3D NULL; + + return argv; +} + /* =20 @deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{fi= le}) --- include/libiberty.h 3 Jan 2011 21:05:50 -0000 1.63 +++ include/libiberty.h 1 Jun 2011 16:17:06 -0000 @@ -74,6 +74,9 @@ extern FILE *freopen_unlocked (const cha =20 extern char **buildargv (const char *) ATTRIBUTE_MALLOC; =20 +extern char **appendargv (char **, const char *, ...) ATTRIBUTE_MALLOC; +extern char **mergeargv (char **iargv, ...) ATTRIBUTE_MALLOC; + /* Free a vector returned by buildargv. */ =20 extern void freeargv (char **); --- gdb/remote-sim.c 1 Jun 2011 15:29:07 -0000 1.103 +++ gdb/remote-sim.c 1 Jun 2011 16:17:06 -0000 @@ -664,7 +664,7 @@ static void gdbsim_open (char *args, int from_tty) { int len; - char *arg_buf; + char **argv; struct sim_inferior_data *sim_data; SIM_DESC gdbsim_desc; =20 @@ -681,44 +681,43 @@ gdbsim_open (char *args, int from_tty) if (gdbsim_is_open) unpush_target (&gdbsim_ops); =20 - len =3D (7 + 1 /* gdbsim */ - + strlen (" -E little") - + strlen (" --architecture=3Dxxxxxxxxxx") - + strlen (" --sysroot=3D") + strlen (gdb_sysroot) + - + (args ? strlen (args) : 0) - + 50) /* slack */ ; - arg_buf =3D (char *) alloca (len); - strcpy (arg_buf, "gdbsim"); /* 7 */ + argv =3D buildargv ("gdbsim"); + /* Specify the byte order for the target when it is explicitly specified by the user (not auto detected). */ switch (selected_byte_order ()) { case BFD_ENDIAN_BIG: - strcat (arg_buf, " -E big"); + argv =3D appendargv (argv, "-E", "big", NULL); break; case BFD_ENDIAN_LITTLE: - strcat (arg_buf, " -E little"); + argv =3D appendargv (argv, "-E", "little", NULL); break; case BFD_ENDIAN_UNKNOWN: break; } + /* Specify the architecture of the target when it has been explicitly specified */ if (selected_architecture_name () !=3D NULL) - { - strcat (arg_buf, " --architecture=3D"); - strcat (arg_buf, selected_architecture_name ()); - } + argv =3D appendargv (argv, "--architecture", + selected_architecture_name (), NULL); + /* Pass along gdb's concept of the sysroot. */ - strcat (arg_buf, " --sysroot=3D"); - strcat (arg_buf, gdb_sysroot); + argv =3D appendargv (argv, "--sysroot", gdb_sysroot, NULL); + /* finally, any explicit args */ if (args) { - strcat (arg_buf, " "); /* 1 */ - strcat (arg_buf, args); + char **uargv; + + uargv =3D gdb_buildargv (args); + sim_argv =3D mergeargv (argv, uargv, NULL); + freeargv (argv); + freeargv (uargv); } - sim_argv =3D gdb_buildargv (arg_buf); + else + sim_argv =3D argv; =20 init_callbacks (); gdbsim_desc =3D sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_a= rgv); --nextPart2706616.YIMqJsBGZm Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. Content-length: 836 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.17 (GNU/Linux) iQIcBAABAgAGBQJN5mYzAAoJEEFjO5/oN/WBm94P/jBXd4BVqHBg/tgc8vXo5xEJ VvmTJo1O94tM/Qale17+WDOqBd/YhBmXy+Nr8+naGr4vf3zLZh0zdI88/HHu4A7M hNAyLbn8INrUfzfoWTFHzuMAwSR3u26SeNpxSMP0Q5Goos3eYUaofbq9QDBK/58a U6Ae74IUtq5Qrg/0glMpb+J2Lg9ZpOytegeFr7Kg0MNC9srptG9ic8B25KTUDc1/ zoamiVq1l/2qbaGHwqPq1IhqamJfU1OAYf861khJHZWajlsTVOiLj4w6m9X20mB6 S+bAeRI/gJtOWjJxW6S8uDZfH8r1l//Cl7Tn7QBB5Dz8nUGMNn8oVFuLA+BOjm8k aOWy/3IG+g0WtUblr5fFXUK4ShuqmMau5ftPd/wKr9GelttT7AFzIaQDiRB4UTjO /K6dyXfmvncz3c7uxeNM03079WxgQhNW4HkmyJLqd3KqHYI4x799nWqXOtK+HKe+ cMcMGBnUQsI9yW46y8W2zMs0anR35fSxrJpxyTUee24WTupvuGmUts/bax4CbhR/ uvMxqwyyRs/0KYW7N5aBcFqeEodzGzqWaw+fL27Hw8Abi3/bwsv65f9WQmoZke6a nL7OipGQ7+cEDutBkPp6lX0sriufzQmdphefWTSP26cuW5skhSLxw+bUyyFE5snQ J6W16ZN1iUafsYVhREA6 =yAR3 -----END PGP SIGNATURE----- --nextPart2706616.YIMqJsBGZm--