qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH] vl.c: add -semihosting-config "arg" sub-arg


From: Liviu Ionescu
Subject: Re: [Qemu-devel] [RFC PATCH] vl.c: add -semihosting-config "arg" sub-argument
Date: Thu, 2 Apr 2015 19:47:01 +0300

> On 02 Apr 2015, at 17:27, Matthew Fortune <address@hidden> wrote:
> 
> Liviu Ionescu <address@hidden> writes:
>> for completeness:
>> 
>> ilg-mbp:gnuarmeclipse-qemu.git ilg$ "/Applications/GNU ARM
>> Eclipse/QEMU/2.2.91-201504021111-dev/bin/qemu-system-gnuarmeclipse" -
>> verbose -machine STM32-H103 -gdb tcp::1234 -semihosting-config
>> enable=on,target=native,cmdline='n "1 a" 2 3'
> 
> I see here that you have switched quotes because you know that you are
> providing a double quoted argument within the string.

my code works both ways symmetrically:

ilg-mbp:~ ilg$ "/Applications/GNU ARM 
Eclipse"/QEMU/2.2.91-201504021111-dev/bin/qemu-system-gnuarmeclipse -verbose 
-machine STM32-H103 -gdb tcp::1234 -semihosting-config 
enable=on,target=native,cmdline="name 1 '2 a' 3"

GNU ARM Eclipse QEMU v2.2.91 (qemu-system-gnuarmeclipse).
Board: 'STM32-H103' (Olimex Header Board for STM32F103RBT6 (Experimental)).
Device: 'STM32F103RB' (cortex-m3, MPU), Flash: 128 KB, RAM: 20 KB.
Command line: 'name 1 '2 a' 3' (14 bytes).
GDB Server listening on: 'tcp::1234'...
... connection accepted from 127.0.0.1.

Execute 'mon system_reset'.
main(argc=4, argv=["name", "1", "2 a", "3"]);
Hello ARM World!

in other words, after being delivered by SYS_GET_CMDLINE to the application, 
the startup parser uses either single or double quotes to split the string into 
arguments, similarly to a real life shell.

> The root of all
> argument passing issues tends to boil down to how to quote and or escape
> characters appropriately. Because you know the arguments you can quote
> correctly but for an unknown user-provided set of arguments (where they
> do not know how their arguments will flow down to an application) then
> the appropriate quoting and escaping becomes harder.
> 
> The problem characters are obviously single and double quotes. Having
> different quoting rules for any of the layers between a user and
> the emulated program is always going to cause some confusion so when
> quoting is necessary I have always found that following the standard
> argument passing rules of the native application is the least
> problematic.

I guess you are generally right, but in this case any quoting is perfectly fine.

> qemu-system... -semihosting-config "arg=foo bar" -semihosting-config 
> "arg=second"
> 
> This should give an argv of ["foo bar", "second"]

yes, but for the casual user the above syntax is already not natural and even 
more confusing: should I use "arg=foo bar" or arg="foo bar"? should I repeat 
-semihosting-config for each argument, or I can group all together 
(-semihosting-config arg="foo bar",arg="second")?


if for your use cases this syntax is acceptable, ok, go for it.


my first use of qemu is as a background GDB server started by an Eclipse 
plug-in. the plug-in will have a single edit field, where the user can enter 
the semihosting command line args. for args that include spaces, the user 
should use either single or double quotes, as in any other field.

my preferred implemention for this would be the original -semihosting-cmdline 
"some string".

both proposed implementations (-semihosting-config cmdline="some-string") and 
even worse for the multiple (-semihosting-config arg=some-string), are way more 
complicated to use in my Eclipse plug-in, requiring special precautions for 
passing single/double quotes, commas and possibly equals.

with the -semihosting-cmdline some-string, the only thing I have to do is to 
pass [-semihosting-cmdline] in one string array element, and the unmodified 
[some-string], regardless the quoting used, as the next string array element, 
and call exec().

given the above reasons, there are good chances that in my qemu fork (GNU ARM 
Eclipse QEMU) I'll have to use the separate -semihosting-cmdline option; if 
you'll accept my patches in the main trunk, ok, if not... no problem; 

as a conclusion, if you like arg=, go for it, but just be aware that this 
solution does not cover all use cases properly.


regards,

Liviu




reply via email to

[Prev in Thread] Current Thread [Next in Thread]