On Thursday 30 September 2010 02:49, Rob Landley wrote:
> Bug #1: defconfig defaults to ash, but I thought hush was the future bash 
> replacement, recipient of future development work, and ash was a dead end.

No (at least not yet). ash is still the default shell.

> Bug #2: if you "exec" a program, ash doesn't rewrite argv[0] to have the new 
> executable name, but keeps the name of the previous shell.
> 
> This is an issue when I try to do a gawk wrapper like so:
> 
>   #!/bin/sh
> 
>   exec /bin/awk "$@"
> 
> The result is:
> 
>   busybox: gawk: applet not found.

I can't reproduce this.

My /bin/gawk:

#!/usr/srcdevel/bbox/fix/busybox-1.17.2/ash
exec /bin/awk "$@"

My /bin/awk is from busybox 1.17.0.

It is invoked when I run bare "gawk" command:

# strace -oLOG gawk
BusyBox v1.17.0 (2010-07-06 15:21:06 CEST) multi-call binary.

Usage: awk [OPTIONS] [AWK_PROGRAM] [FILE]...

Options:
        -v VAR=VAL      Set variable
        -F SEP          Use SEP as field separator
        -f FILE         Read program from FILE


Here is the strace LOG:

execve("/bin/gawk", ["gawk"], [/* 33 vars */]) = 0
brk(0)                                  = 0x8103000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xf7741000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=57367, ...}) = 0
mmap2(NULL, 57367, PROT_READ, MAP_PRIVATE, 3, 0) = 0xf7732000
close(3)                                = 0
open("/lib/libm.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0204\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=195898, ...}) = 0
mmap2(NULL, 151680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0xf770c000
mmap2(0xf7730000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23) = 0xf7730000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0bl\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1487723, ...}) = 0
mmap2(NULL, 1227016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0xf75e0000
mmap2(0xf7706000, 12288, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x126) = 0xf7706000
mmap2(0xf7709000, 10504, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7709000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xf75df000
set_thread_area({entry_number:-1 -> 12, base_addr:0xf75df6c0, limit:1048575, 
seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, 
useable:1}) = 0
mprotect(0xf7706000, 8192, PROT_READ)   = 0
mprotect(0xf7730000, 4096, PROT_READ)   = 0
mprotect(0xf775c000, 4096, PROT_READ)   = 0
munmap(0xf7732000, 57367)               = 0
getuid32()                              = 0
brk(0)                                  = 0x8103000
brk(0x8124000)                          = 0x8124000
getpid()                                = 10138
rt_sigaction(SIGCHLD, {SIG_DFL}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGHUP, {SIG_DFL}, {SIG_DFL}, 8) = 0
getppid()                               = 10137
stat64("/.1/usr/srcdevel/bbox/fix/busybox-1.17.2", {st_mode=S_IFDIR|0755, 
st_size=1704, ...}) = 0
stat64(".", {st_mode=S_IFDIR|0755, st_size=1704, ...}) = 0
open("/bin/gawk", O_RDONLY|O_LARGEFILE) = 3
fcntl64(3, F_DUPFD, 10)                 = 10
close(3)                                = 0
fcntl64(10, F_SETFD, FD_CLOEXEC)        = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {0x808644f, ~[RTMIN RT_1], 0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL}, NULL, 8) = 0
read(10, "#!/usr/srcdevel/bbox/fix/busybox"..., 1023) = 64
waitpid(-1, 0xffb58a38, WNOHANG)        = -1 ECHILD (No child processes)
execve("/bin/awk", ["/bin/awk"], [/* 33 vars */]) = 0    
<======================== here is the execve with correct argv[0]
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
getuid32()                              = 0
brk(0)                                  = 0x8117000
brk(0x8118000)                          = 0x8118000
brk(0x8119000)                          = 0x8119000
old_mmap(NULL, 45056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) = 
0xf7743000
old_mmap(NULL, 401408, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) = 
0xf76e1000
old_mmap(NULL, 81920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) = 
0xf76cd000
munmap(0xf76e1000, 401408)              = 0
munmap(0xf7743000, 45056)               = 0
write(2, "BusyBox v1.17.0 (2010-07-06 15:2"..., 42) = 42
write(2, " multi-call binary.\n", 20)   = 20
write(2, "\nUsage: ", 8)                = 8
write(2, "awk", 3)                      = 3
write(2, " ", 1)                        = 1
write(2, "[OPTIONS] [AWK_PROGRAM] [FILE].."..., 137) = 137
write(2, "\n\n", 2)                     = 2
_exit(1)                                = ?


-- 
vda
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to