[U-Boot] [RFC] bootm: fix passing argc to standalone apps

This bug appears in b6396403 which makes u-boot unable to pass arguments via bootm to a standalone application without this patch.
Steps to reproduce.
Compile a u-boot. Use mkimage to package the standalone hello_world.bin file.
e.g. For the MIPS Boston platform
mkimage -n "hello" -A mips -O u-boot -C none -T standalone \ -a 0xffffffff80200000 -d hello_world.bin \ -ep 0xffffffff80200000 hello_out
Then tftp hello_out and run it using
boston # dhcp 192.168.154.45:hello_out ... boston # bootm $loadaddr 123 321
Without the patch the following output is observed.
Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 0 argv[0] = "0xffffffff88000000"
With the patch, you see the following.
boston # bootm $loadaddr 123 321 Image Name: hello Image Type: MIPS U-Boot Standalone Program (uncompressed) Data Size: 1240 Bytes = 1.2 KiB Load Address: 80200000 Entry Point: 80200000 Verifying Checksum ... OK Loading Standalone Program ... OK Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 0 argv[0] = "0xffffffff88000000" Hit any key to exit ...
The go command at the entry point seems to work.
boston # go 0xffffffff80200000 123 321 Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 3 argv[0] = "0xffffffff80200000" argv[1] = "123" argv[2] = "321" argv[3] = "<NULL>" Hit any key to exit ...
Signed-off-by: Zubair Lutfullah Kakakhel Zubair.Kakakhel@imgtec.com
---
Tested on the MIPS Boston platform. --- common/bootm.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/common/bootm.c b/common/bootm.c index a4d22a6..b2c0912 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -619,10 +619,8 @@ int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[], if (!ret && (states & BOOTM_STATE_FINDOS)) ret = bootm_find_os(cmdtp, flag, argc, argv);
- if (!ret && (states & BOOTM_STATE_FINDOTHER)) { + if (!ret && (states & BOOTM_STATE_FINDOTHER)) ret = bootm_find_other(cmdtp, flag, argc, argv); - argc = 0; /* consume the args */ - }
/* Load the OS */ if (!ret && (states & BOOTM_STATE_LOADOS)) {

Hi,
On 09/08/2016 09:23 AM, Zubair Lutfullah Kakakhel wrote:
This bug appears in b6396403 which makes u-boot unable to pass arguments via bootm to a standalone application without this patch.
Steps to reproduce.
Compile a u-boot. Use mkimage to package the standalone hello_world.bin file.
e.g. For the MIPS Boston platform
mkimage -n "hello" -A mips -O u-boot -C none -T standalone \ -a 0xffffffff80200000 -d hello_world.bin \ -ep 0xffffffff80200000 hello_out
Then tftp hello_out and run it using
boston # dhcp 192.168.154.45:hello_out ... boston # bootm $loadaddr 123 321
Without the patch the following output is observed.
Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 0 argv[0] = "0xffffffff88000000"
With the patch, you see the following.
boston # bootm $loadaddr 123 321 Image Name: hello Image Type: MIPS U-Boot Standalone Program (uncompressed) Data Size: 1240 Bytes = 1.2 KiB Load Address: 80200000 Entry Point: 80200000 Verifying Checksum ... OK Loading Standalone Program ... OK Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 0
argc = 3
argv[0] = "0xffffffff88000000"
argv[1] = 123 argv[2] = 321
Copy paste fluke in the git log. Sorry. The above appears in reality
Regards, ZubairLK
Hit any key to exit ...
The go command at the entry point seems to work.
boston # go 0xffffffff80200000 123 321 Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 3 argv[0] = "0xffffffff80200000" argv[1] = "123" argv[2] = "321" argv[3] = "<NULL>" Hit any key to exit ...
Signed-off-by: Zubair Lutfullah Kakakhel Zubair.Kakakhel@imgtec.com
Tested on the MIPS Boston platform.
common/bootm.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/common/bootm.c b/common/bootm.c index a4d22a6..b2c0912 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -619,10 +619,8 @@ int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[], if (!ret && (states & BOOTM_STATE_FINDOS)) ret = bootm_find_os(cmdtp, flag, argc, argv);
- if (!ret && (states & BOOTM_STATE_FINDOTHER)) {
- if (!ret && (states & BOOTM_STATE_FINDOTHER)) ret = bootm_find_other(cmdtp, flag, argc, argv);
argc = 0; /* consume the args */
}
/* Load the OS */ if (!ret && (states & BOOTM_STATE_LOADOS)) {

On Thu, Sep 08, 2016 at 10:24:44AM +0100, Zubair Lutfullah Kakakhel wrote:
Hi,
On 09/08/2016 09:23 AM, Zubair Lutfullah Kakakhel wrote:
This bug appears in b6396403 which makes u-boot unable to pass arguments via bootm to a standalone application without this patch.
Steps to reproduce.
Compile a u-boot. Use mkimage to package the standalone hello_world.bin file.
e.g. For the MIPS Boston platform
mkimage -n "hello" -A mips -O u-boot -C none -T standalone \ -a 0xffffffff80200000 -d hello_world.bin \ -ep 0xffffffff80200000 hello_out
Then tftp hello_out and run it using
boston # dhcp 192.168.154.45:hello_out ... boston # bootm $loadaddr 123 321
Without the patch the following output is observed.
Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 0 argv[0] = "0xffffffff88000000"
With the patch, you see the following.
boston # bootm $loadaddr 123 321 Image Name: hello Image Type: MIPS U-Boot Standalone Program (uncompressed) Data Size: 1240 Bytes = 1.2 KiB Load Address: 80200000 Entry Point: 80200000 Verifying Checksum ... OK Loading Standalone Program ... OK Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 0
argc = 3
argv[0] = "0xffffffff88000000"
argv[1] = 123 argv[2] = 321
Copy paste fluke in the git log. Sorry. The above appears in reality
Regards, ZubairLK
Hit any key to exit ...
The go command at the entry point seems to work.
boston # go 0xffffffff80200000 123 321 Example expects ABI version 8 Actual U-Boot ABI version 8 Hello World argc = 3 argv[0] = "0xffffffff80200000" argv[1] = "123" argv[2] = "321" argv[3] = "<NULL>" Hit any key to exit ...
Signed-off-by: Zubair Lutfullah Kakakhel Zubair.Kakakhel@imgtec.com
Tested on the MIPS Boston platform.
common/bootm.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/common/bootm.c b/common/bootm.c index a4d22a6..b2c0912 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -619,10 +619,8 @@ int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[], if (!ret && (states & BOOTM_STATE_FINDOS)) ret = bootm_find_os(cmdtp, flag, argc, argv);
- if (!ret && (states & BOOTM_STATE_FINDOTHER)) {
- if (!ret && (states & BOOTM_STATE_FINDOTHER)) ret = bootm_find_other(cmdtp, flag, argc, argv);
argc = 0; /* consume the args */
}
/* Load the OS */ if (!ret && (states & BOOTM_STATE_LOADOS)) {
Can you re-send with a corrected commit log? Thanks.
participants (2)
-
Tom Rini
-
Zubair Lutfullah Kakakhel