- 论坛徽章:
- 0
|
Hi 各位老大,
目前我正在一块使用Freescale P1020 CPU的板子上调试application,但是我的application是hang在了setuid(0) libc function中。
使用的toolchain和kernel,都是来自Freescale P1020 SDK:
gcc-4.3.74-eglibc-2.8.74-dp-2
linux-2.6.31.
我的application中的threads如下:
main() thread - SCHED_NORMAL
|
|------- thread #a, implement a timer using SIGALRM - SCHED_RR
|
|-------- thread #b – SCHED_NORMAL - this is who hangs at setuid(0).
|
|-------- thread #c - SCHED_RR, waitting on a netlink FD for incomming event
在kernel中加了一点debug用的代码,发现,thread #b的确是从sys_setuid()成功返回了,并且返回时其state为TASK_RUNNING,但是并没有返回到user-level code中来,而是继续停留在setuid() libc function中,到了另一个system call sys_futex()中,并且kernel mode stack calltrace是:
[cdc25c80] [c007e5ac] __rcu_process_callbacks+0x2c4/0x3a0 (unreliable)
[cdc25d40] [c0007ef8] __switch_to+0x5c/0xcc
[cdc25d50] [c0488ab8] schedule+0x2dc/0x4c4
[cdc25db0] [c00699e0] futex_wait_queue_me+0xfc/0x134
[cdc25de0] [c0069b54] futex_wait+0x13c/0x2cc
[cdc25ec0] [c006c560] do_futex+0x58/0x1e8
[cdc25ee0] [c006c784] sys_futex+0x94/0x1e4
[cdc25f40] [c0010254] ret_from_syscall+0x0/0x3c
在网上也找到一个discussion,关于RT thread setuid() hang的:
http://linux.derkeiler.com/Maili ... 09-02/msg09870.html
但是这个fix是已经在kernel 2.6.31中有了,并且说的是RT thread,而我的thread #b是SCHED_NORMAL,所以我觉得情况还不是一样。
我的一些kernel confi options如下:
CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_GROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not set
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUPS is not set
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
尽管 CONFIG_PREEMPT 没有设置, 我也试验过设置的情况, setuid() 仍然是hang。
不管怎样,我是没什么idea可用了。
各位老大,觉得这和所使用的Freescale P1020 SDK, gcc-4.3.74-eglibc-2.8.74-dp-2有关系吗? 可不可以向小弟我提供下思路和方向?
如果还需要提供什么信息,请告知。 非常感谢。 |
|