From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32055 invoked by alias); 10 Aug 2007 11:03:13 -0000 Received: (qmail 31668 invoked by uid 22791); 10 Aug 2007 11:03:09 -0000 X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 10 Aug 2007 11:03:05 +0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.1/8.13.1) with ESMTP id l7AB2gTl026370; Fri, 10 Aug 2007 07:02:42 -0400 Received: from pobox.fab.redhat.com (pobox.fab.redhat.com [10.33.63.12]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l7AB2eRY006491; Fri, 10 Aug 2007 07:02:40 -0400 Received: from workshop.redhat.com (vpn-6-17.fab.redhat.com [10.33.6.17]) by pobox.fab.redhat.com (8.13.1/8.13.1) with ESMTP id l7AB2cQB023103; Fri, 10 Aug 2007 07:02:38 -0400 To: bje@gnu.org, fche@redhat.com, bje@au.ibm.com Cc: gdb-patches@sourceware.org Subject: RFA: Support memory size abbreviations From: Nick Clifton Date: Fri, 10 Aug 2007 11:03:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" 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: 2007-08/txt/msg00205.txt.bz2 --=-=-= Content-length: 938 Hi Ben, Hi Frank, I had occasion to use the simulator's --memory-size switch the other day and I found it frustrating that it did not allow me to specify the size in terms of megabytes. So I developed this patch to support this kind of thing. With the patch applied you can use suffixes to specify the size of memory. eg: --memory-size=4m to specify 4 megabytes of memory --memory-size=12k to specify 12 kilobytes of memory --memory-size=2G to specify 2 gigabytes of memory May I apply this patch please ? Cheers Nick sim/common/ChangeLog 2007-08-10 Nick Clifton * sim-memopt.c (memory_options): Mention that the --memory-size switch accepts suffixes. (parse_size): Handle a suffix on the size value. * sim-options.c (standard_options): Mention that the mem-size switch accepts suffixes. (standard_option_handler): Handle a suffix on the size value. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=common.patch Content-length: 4034 Index: sim/common/sim-memopt.c =================================================================== RCS file: /cvs/src/src/sim/common/sim-memopt.c,v retrieving revision 1.4 diff -c -3 -p -r1.4 sim-memopt.c *** sim/common/sim-memopt.c 9 Jan 2007 17:59:16 -0000 1.4 --- sim/common/sim-memopt.c 10 Aug 2007 10:54:01 -0000 *************** static const OPTION memory_options[] = *** 90,97 **** memory_option_handler }, { {"memory-size", required_argument, NULL, OPTION_MEMORY_SIZE }, ! '\0', "SIZE", "Add memory at address zero", ! memory_option_handler }, { {"memory-fill", required_argument, NULL, OPTION_MEMORY_FILL }, '\0', "VALUE", "Fill subsequently added memory regions", --- 90,97 ---- memory_option_handler }, { {"memory-size", required_argument, NULL, OPTION_MEMORY_SIZE }, ! '\0', "[in bytes, Kb (k suffix), Mb (m suffix) or Gb (g suffix)]", ! "Add memory at address zero", memory_option_handler }, { {"memory-fill", required_argument, NULL, OPTION_MEMORY_FILL }, '\0', "VALUE", "Fill subsequently added memory regions", *************** parse_size (char *chp, *** 286,296 **** address_word *nr_bytes, unsigned *modulo) { ! /* [ "%" ] */ *nr_bytes = strtoul (chp, &chp, 0); ! if (*chp == '%') { *modulo = strtoul (chp + 1, &chp, 0); } return chp; } --- 286,313 ---- address_word *nr_bytes, unsigned *modulo) { ! /* [K|M|G] [ "%" ] */ *nr_bytes = strtoul (chp, &chp, 0); ! switch (*chp) { + case '%': *modulo = strtoul (chp + 1, &chp, 0); + break; + case 'g': case 'G': /* Gigabyte suffix. */ + *nr_bytes <<= 10; + /* Fall through. */ + case 'm': case 'M': /* Megabyte suffix. */ + *nr_bytes <<= 10; + /* Fall through. */ + case 'k': case 'K': /* Kilobyte suffix. */ + *nr_bytes <<= 10; + /* Check for a modulo specifier after the suffix. */ + ++ chp; + if (* chp == 'b' || * chp == 'B') + ++ chp; + if (* chp == '%') + *modulo = strtoul (chp + 1, &chp, 0); + break; } return chp; } Index: sim/common/sim-options.c =================================================================== RCS file: /cvs/src/src/sim/common/sim-options.c,v retrieving revision 1.9 diff -c -3 -p -r1.9 sim-options.c *** sim/common/sim-options.c 9 Jan 2007 17:59:16 -0000 1.9 --- sim/common/sim-options.c 10 Aug 2007 10:54:01 -0000 *************** static const OPTION standard_options[] = *** 167,174 **** #ifdef SIM_HAVE_FLATMEM { {"mem-size", required_argument, NULL, OPTION_MEM_SIZE}, ! 'm', "MEMORY SIZE", "Specify memory size", ! standard_option_handler }, #endif { {"do-command", required_argument, NULL, OPTION_DO_COMMAND}, --- 167,174 ---- #ifdef SIM_HAVE_FLATMEM { {"mem-size", required_argument, NULL, OPTION_MEM_SIZE}, ! 'm', "[in bytes, Kb (k suffix), Mb (m suffix) or Gb (g suffix)]", ! "Specify memory size", standard_option_handler }, #endif { {"do-command", required_argument, NULL, OPTION_DO_COMMAND}, *************** standard_option_handler (SIM_DESC sd, si *** 381,387 **** #ifdef SIM_HAVE_FLATMEM case OPTION_MEM_SIZE: { ! unsigned long ul = strtol (arg, NULL, 0); /* 16384: some minimal amount */ if (! isdigit (arg[0]) || ul < 16384) { --- 381,401 ---- #ifdef SIM_HAVE_FLATMEM case OPTION_MEM_SIZE: { ! char * endp; ! unsigned long ul = strtol (arg, &endp, 0); ! ! switch (* endp) ! { ! case 'k': case 'K': size <<= 10; break; ! case 'm': case 'M': size <<= 20; break; ! case 'g': case 'G': size <<= 30; break; ! case ' ': case '\0': case '\t': break; ! default: ! if (ul > 0) ! sim_io_eprintf (sd, "Ignoring strange character at end of memory size: %c\n", * endp); ! break; ! } ! /* 16384: some minimal amount */ if (! isdigit (arg[0]) || ul < 16384) { --=-=-=--