From: Nick Clifton <nickc@redhat.com>
To: bje@gnu.org, fche@redhat.com, bje@au.ibm.com
Cc: gdb-patches@sourceware.org
Subject: RFA: Support memory size abbreviations
Date: Fri, 10 Aug 2007 11:03:00 -0000 [thread overview]
Message-ID: <m3zm0zejoy.fsf@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 938 bytes --]
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 <nickc@redhat.com>
* 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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: common.patch --]
[-- Type: text/x-patch, Size: 4034 bytes --]
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', "<size>[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> [ "%" <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)
{
! /* <nr_bytes>[K|M|G] [ "%" <modulo> ] */
*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', "<size>[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)
{
next reply other threads:[~2007-08-10 11:03 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-10 11:03 Nick Clifton [this message]
2007-08-13 1:45 ` Ben Elliston
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3zm0zejoy.fsf@redhat.com \
--to=nickc@redhat.com \
--cc=bje@au.ibm.com \
--cc=bje@gnu.org \
--cc=fche@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox