thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Siamak Haschemi <hasch...@informatik.hu-berlin.de>
Subject Re: Use Thrift in the OpenWRT platform
Date Wed, 22 Oct 2008 19:10:45 GMT
Hello again,

now I have some results:

>1/ If you can run your program under gdb, please do so.  When it crashes,
>execute the "backtrace" command.  Paste the results.

Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.
(gdb) help breakpoints
Making program stop at certain points.

List of commands:

awatch -- Set a watchpoint for an expression
break -- Set breakpoint at specified line or function
catch -- Set catchpoints to catch events
clear -- Clear breakpoint at specified line or function
commands -- Set commands to be executed when a breakpoint is hit
condition -- Specify breakpoint number N to break only if COND is true
delete -- Delete some breakpoints or auto-display expressions
delete breakpoints -- Delete some breakpoints or auto-display expressions
delete checkpoint -- Delete a fork/checkpoint (experimental)
delete display -- Cancel some expressions to be displayed when program stops
delete mem -- Delete memory region
delete tracepoints -- Delete specified tracepoints
disable -- Disable some breakpoints
disable breakpoints -- Disable some breakpoints
disable display -- Disable some expressions to be displayed when program
stops
disable mem -- Disable memory region
disable tracepoints -- Disable specified tracepoints
enable -- Enable some breakpoints
enable delete -- Enable breakpoints and delete when hit
enable display -- Enable some expressions to be displayed when program stops
enable mem -- Enable memory region
enable once -- Enable breakpoints for one hit
enable tracepoints -- Enable specified tracepoints
hbreak -- Set a hardware assisted  breakpoint
ignore -- Set ignore-count of breakpoint number N to COUNT
rbreak -- Set a breakpoint for all functions matching REGEXP
rwatch -- Set a read watchpoint for an expression
tbreak -- Set a temporary breakpoint
tcatch -- Set temporary catchpoints to catch events
thbreak -- Set a temporary hardware assisted breakpoint
watch -- Set a watchpoint for an expression

Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.
(gdb) breakpoints clear
Undefined command: "breakpoints".  Try "help".
(gdb) break clear
Function "clear" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) quit
siamak@siamak-desktop:~/seismo-openwrt/trunk/build_dir/i386/root-x86$ gdb
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
(gdb) >> 1/ If you can run your program under gdb, please do so.  When
it crashes,
Undefined command: ">>".  Try "help".
(gdb) >> execute the "backtrace" command.  Paste the results.Quit
(gdb) quit
siamak@siamak-desktop:~/seismo-openwrt/trunk/build_dir/i386/root-x86$ gdb
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
(gdb) set solib-absolute-prefix
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86
(gdb) file bin/hello
Reading symbols from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/bin/hello...done.
(gdb) target remote 141.20.23.212:2345
Remote debugging using 141.20.23.212:2345
0xb7f6e910 in _start () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/ld-uClibc.so.0
(gdb) continue
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0xb7dafb0a in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
(gdb) bt
#0  0xb7dafb0a in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#1  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#2  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#3  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#4  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#5  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#6  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#7  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#8  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#9  0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#10 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#11 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#12 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#13 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#14 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#15 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#16 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#17 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#18 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#19 0xb7dafb2b in _pthread_cleanup_push_defer ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
---Type <return> to continue, or q <return> to quit---

>2/ execute the command "break setrlimit", then "run" (say "yes" when it
>asks you if you want to start your program from the beginning).  It should
>stop right before calling setrlimit.  Paste the backtrace

Breakpoint 1, 0xb7db5aa5 in setrlimit ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
(gdb) bt
#0  0xb7db5aa5 in setrlimit () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libc.so.0
#1  0xb7d9bb22 in ?? () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libpthread.so.0
#2  0xb7d9c137 in ?? () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libpthread.so.0
#3  0xb7d966c1 in ?? () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/libpthread.so.0
#4  0xb7fa73f0 in _dl_get_ready_to_run ()
   from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/ld-uClibc.so.0
#5  0xb7fa76ea in ?? () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/ld-uClibc.so.0
#6  0xb7fa4915 in _start () from
/home/siamak/seismo-openwrt/trunk/build_dir/i386/root-x86/lib/ld-uClibc.so.0



Kind regards,

Siamak

Siamak Haschemi schrieb:
> Hello David,
> 
> thank you for helping me!
> 
> I have troubles in setting breakpoints. I'm forced to use gdbserver with
> gdb. I replaced the real IP with DEVICE_IP in this E-Mail.
> 
> See my comments below.
> 
> David Reiss schrieb:
>> Can you please report the following...
>>
>> 1/ If you can run your program under gdb, please do so.  When it crashes,
>> execute the "backtrace" command.  Paste the results.
> 
> GNU gdb 6.8-debian
> Copyright (C) 2008 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i486-linux-gnu".
> (gdb) symbol-file hello
> Reading symbols from
> /home/siamak/seismo-openwrt/trunk/build_dir/i386/hello/hello...done.
> (gdb) target remote DEVICE_IP:2345
> Remote debugging using DEVICE_IP:2345
> 0xb7f23910 in ?? ()
> (gdb) continue
> Continuing.
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0xb7d6db0a in ?? ()
> (gdb) backtrace
> #0  0xb7d6db0a in ?? ()
> #1  0xb7d6db2b in ?? ()
> #2  0xb7d6db2b in ?? ()
> #3  0xb7d6db2b in ?? ()
> #4  0xb7d6db2b in ?? ()
> #5  0xb7d6db2b in ?? ()
> #6  0xb7d6db2b in ?? ()
> #7  0xb7d6db2b in ?? ()
> #8  0xb7d6db2b in ?? ()
> #9  0xb7d6db2b in ?? ()
> #10 0xb7d6db2b in ?? ()
> #11 0xb7d6db2b in ?? ()
> #12 0xb7d6db2b in ?? ()
> #13 0xb7d6db2b in ?? ()
> #14 0xb7d6db2b in ?? ()
> #15 0xb7d6db2b in ?? ()
> #16 0xb7d6db2b in ?? ()
> #17 0xb7d6db2b in ?? ()
> #18 0xb7d6db2b in ?? ()
> #19 0xb7d6db2b in ?? ()
> #20 0xb7d6db2b in ?? ()
> #21 0xb7d6db2b in ?? ()
> #22 0xb7d6db2b in ?? ()
> #23 0xb7d6db2b in ?? ()
> #24 0xb7d6db2b in ?? ()
> #25 0xb7d6db2b in ?? ()
> #26 0xb7d6db2b in ?? ()
> #27 0xb7d6db2b in ?? ()
> #28 0xb7d6db2b in ?? ()
> #29 0xb7d6db2b in ?? ()
> #30 0xb7d6db2b in ?? ()
> #31 0xb7d6db2b in ?? ()
> #32 0xb7d6db2b in ?? ()
> #33 0xb7d6db2b in ?? ()
> ---Type <return> to continue, or q <return> to quit---
> #34 0xb7d6db2b in ?? ()
> #35 0xb7d6db2b in ?? ()
> #36 0xb7d6db2b in ?? ()
> #37 0xb7d6db2b in ?? ()
> #38 0xb7d6db2b in ?? ()
> #39 0xb7d6db2b in ?? ()
> #40 0xb7d6db2b in ?? ()
> #41 0xb7d6db2b in ?? ()
> #42 0xb7d6db2b in ?? ()
> #43 0xb7d6db2b in ?? ()
> #44 0xb7d6db2b in ?? ()
> #45 0xb7d6db2b in ?? ()
> #46 0xb7d6db2b in ?? ()
> #47 0xb7d6db2b in ?? ()
> #48 0xb7d6db2b in ?? ()
> #49 0xb7d6db2b in ?? ()
> #50 0xb7d6db2b in ?? ()
> #51 0xb7d6db2b in ?? ()
> #52 0xb7d6db2b in ?? ()
> #53 0xb7d6db2b in ?? ()
> #54 0xb7d6db2b in ?? ()
> #55 0xb7d6db2b in ?? ()
> #56 0xb7d6db2b in ?? ()
> #57 0xb7d6db2b in ?? ()
> #58 0xb7d6db2b in ?? ()
> #59 0xb7d6db2b in ?? ()
> #60 0xb7d6db2b in ?? ()
> #61 0xb7d6db2b in ?? ()
> #62 0xb7d6db2b in ?? ()
> #63 0xb7d6db2b in ?? ()
> #64 0xb7d6db2b in ?? ()
> #65 0xb7d6db2b in ?? ()
> #66 0xb7d6db2b in ?? ()
> #67 0xb7d6db2b in ?? ()
> ---Type <return> to continue, or q <return> to quit---
> ... and so on
> 
>> 2/ execute the command "break setrlimit", then "run" (say "yes" when it
>> asks you if you want to start your program from the beginning).  It should
>> stop right before calling setrlimit.  Paste the backtrace.
> 
> GNU gdb 6.8-debian
> Copyright (C) 2008 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i486-linux-gnu".
> (gdb) symbol-file hello
> Reading symbols from
> /home/siamak/seismo-openwrt/trunk/build_dir/i386/hello/hello...done.
> (gdb) target remote DEVICE_IP:2345
> Remote debugging using DEVLICE_IP:2345
> 0xb7f9c910 in ?? ()
> (gdb) break setrlimit
> Function "setrlimit" not defined.
> Make breakpoint pending on future shared library load? (y or [n]) y
> Breakpoint 1 (setrlimit) pending.
> (gdb) c
> Continuing.
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0xb7de6b0a in ?? ()
> 
> :-( gdb does not stop at the breakpoint.
> 
> 
> 
>> Please make sure that you have compiled Thrift for debugging.
>> ("./configure CXXFLAGS='-O0 -g'").
> 
> I run another test in which I force the loading of a library:
> 
> 1)
> root@OpenWrt:~# env LD_PRELOAD=/usr/lib/libz.so.1 echo hello
> hello
> 
> 2)
> root@OpenWrt:~# env LD_PRELOAD=/usr/lib/libnl.so.1 echo hello
> hello
> 
> 3)
> root@OpenWrt:~# env LD_PRELOAD=/usr/lib/libthrift.so.0 echo hello
> Segmentation fault
> 
> 
> ======
> 
> 
> And here are some (relevant) outputs from the build:
> 
> 
> CFLAGS="-O2 -pipe -march=i486 -funit-at-a-time -fhonour-copts
> -I/home/siamak/seismo-openwrt/trunk/staging_dir/i386/usr/include
> -I/home/siamak/seismo-openwrt/trunk/staging_dir/i386/include "
> 
> CXXFLAGS="-O2 -pipe -march=i486 -funit-at-a-time -fhonour-copts
> -I/home/siamak/seismo-openwrt/trunk/staging_dir/i386/usr/include
> -I/home/siamak/seismo-openwrt/trunk/staging_dir/i386/include  -g"
> 
> LDFLAGS="-L/home/siamak/seismo-openwrt/trunk/staging_dir/toolchain-i386_gcc4.1.2/lib
> -L/home/siamak/seismo-openwrt/trunk/staging_dir/i386/usr/lib
> -L/home/siamak/seismo-openwrt/trunk/staging_dir/i386/lib " make -C
> /home/siamak/seismo-openwrt/trunk/build_dir/i386/thrift/lib/cpp
> 
> DESTDIR="/home/siamak/seismo-openwrt/trunk/build_dir/i386/thrift/ipkg-install"
> 
> 
> AR=i386-linux-uclibc-ar AS="ccache i386-linux-uclibc-gcc -c -O2 -pipe
> -march=i486 -funit-at-a-time -fhonour-copts" LD=i386-linux-uclibc-ld
> 
> NM=i386-linux-uclibc-nm
> CC="ccache i386-linux-uclibc-gcc"
> GCC="ccache i386-linux-uclibc-gcc"
> CXX="i386-linux-uclibc-g++"
> RANLIB=i386-linux-uclibc-ranlib
> STRIP=i386-linux-uclibc-strip
> OBJCOPY=i386-linux-uclibc-objcopy
> OBJDUMP=i386-linux-uclibc-objdump
> SIZE=i386-linux-uclibc-size
> CROSS="i386-linux-uclibc-"
> ARCH="i386"
> 
> 
> i386-linux-uclibc-g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I./src
> -I/home/siamak/seismo-openwrt/trunk/staging_dir/i386/usr/include
> -I/home/siamak/seismo-openwrt/trunk/staging_dir/i386/include -Wall -O0
> -g -MT Monitor.lo -MD -MP -MF .deps/Monitor.Tpo -c
> src/concurrency/Monitor.cpp  -fPIC -DPIC -o .libs/Monitor.o
> 
> 
>> --David
>>
>> Siamak Haschemi wrote:
>>> Hello again,
>>>
>>> the Hello world program without the thrift library linked shows this
>>> strace (only the last relevant lines included):
>>>
>>>
>>> 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
>>> brk(0)                                  = 0x88a7000
>>> brk(0x88a8000)                          = 0x88a8000
>>> write(1, "Hello World\n", 12Hello World
>>> )           = 12
>>> _exit(0)
>>>
>>>
>>> For me, it looks like an problem with "getrlimit" or "setrlimit" function.
>>>
>>> Lind regards,
>>>
>>> Siamak Haschemi
>>>
>>> Siamak Haschemi schrieb:
>>>> Hello again,
>>>>
>>>> I don't know if it helps, but here is some more information:
>>>>
>>>>
>>>>
>>>> root@OpenWrt:~# ldd ./hello
>>>>         libthrift.so.0 => /lib/libthrift.so.0 (0xb7f23000)
>>>>         libstdc++.so.6 => /lib/libstdc++.so.6 (0xb7e68000)
>>>>         libm.so.0 => /lib/libm.so.0 (0xb7e5b000)
>>>>         libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e52000)
>>>>         libc.so.0 => /lib/libc.so.0 (0xb7e08000)
>>>>         librt.so.0 => /lib/librt.so.0 (0xb7e05000)
>>>>         libpthread.so.0 => /lib/libpthread.so.0 (0xb7df3000)
>>>>         ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0xb7fb9000)
>>>>
>>>>
>>>>
>>>> root@OpenWrt:~# strace ./hello
>>>> execve("/bin/hello", ["/bin/hello"], [/* 8 vars */]) = 0
>>>> mmap2(NULL, 20, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
>>>> = 0xb7f52000
>>>> stat("/etc/ld.so.cache", 0xbff56254)    = -1 ENOENT (No such file or
>>>> directory)
>>>> open("/lib/libthrift.so.0", O_RDONLY)   = 3
>>>> fstat(3, {st_mode=S_IFREG|0755, st_size=604571, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20q\2\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 606208, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>>> 0xb7ebd000
>>>> mmap2(0xb7ebd000, 591833, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7ebd000
>>>> mmap2(0xb7f4e000, 10651, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0x91) = 0xb7f4e000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/libstdc++.so.6", O_RDONLY)   = 3
>>>> fstat(3, {st_mode=S_IFREG|0755, st_size=741369, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0,\0\4\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 765952, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>>> 0xb7e02000
>>>> mmap2(0xb7e02000, 719316, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7e02000
>>>> mmap2(0xb7eb2000, 20473, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0xb0) = 0xb7eb2000
>>>> mmap2(0xb7eb7000, 23828, PROT_READ|PROT_WRITE,
>>>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7eb7000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/libm.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=45080, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0t\21\0\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 53248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7df5000
>>>> mmap2(0xb7df5000, 41028, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7df5000
>>>> mmap2(0xb7e00000, 4120, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0xa) = 0xb7e00000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=31974, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0H\25\0\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 36864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7dec000
>>>> mmap2(0xb7dec000, 31592, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7dec000
>>>> mmap2(0xb7df4000, 3302, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0x7) = 0xb7df4000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\251\0\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 303104, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>>> 0xb7da2000
>>>> mmap2(0xb7da2000, 271528, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7da2000
>>>> mmap2(0xb7de5000, 5309, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0x42) = 0xb7de5000
>>>> mmap2(0xb7de7000, 16988, PROT_READ|PROT_WRITE,
>>>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7de7000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/librt.so.0", O_RDONLY)       = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=4110, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\344\4\0\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 12288, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7d9f000
>>>> mmap2(0xb7d9f000, 2336, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7d9f000
>>>> mmap2(0xb7da0000, 4110, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7da0000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/libpthread.so.0", O_RDONLY)  = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=58930, ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xb7f51000
>>>> read(3,
>>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0004=\0\0004\0\0\0"...,
>>>> 4096) = 4096
>>>> mmap2(NULL, 73728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7d8d000
>>>> mmap2(0xb7d8d000, 37304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0) = 0xb7d8d000
>>>> mmap2(0xb7d97000, 22066, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
>>>> 0x9) = 0xb7d97000
>>>> mmap2(0xb7d9d000, 6232, PROT_READ|PROT_WRITE,
>>>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7d9d000
>>>> close(3)                                = 0
>>>> munmap(0xb7f51000, 4096)                = 0
>>>> open("/lib/libstdc++.so.6", O_RDONLY)   = 3
>>>> fstat(3, {st_mode=S_IFREG|0755, st_size=741369, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libm.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=45080, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=31974, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libm.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=45080, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=31974, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> close(3)                                = 0
>>>> open("/lib/libc.so.0", O_RDONLY)        = 3
>>>> fstat(3, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
>>>> close(3)                                = 0
>>>> stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=16390, ...}) =
0
>>>> mprotect(0xb7eb2000, 16384, PROT_READ)  = 0
>>>> mprotect(0xb7e00000, 4096, PROT_READ)   = 0
>>>> mprotect(0xb7de5000, 4096, PROT_READ)   = 0
>>>> mprotect(0xb7da0000, 4096, PROT_READ)   = 0
>>>> mprotect(0xb7d97000, 4096, PROT_READ)   = 0
>>>> mprotect(0xb7f57000, 4096, PROT_READ)   = 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
>>>> getpid()                                = 2933
>>>> getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
>>>> setrlimit(RLIMIT_STACK, {rlim_cur=2040*1024, rlim_max=RLIM_INFINITY}) = 0
>>>> rt_sigaction(SIGRTMIN, {0xb7d95f96, [], SA_RESTORER, 0xb7dac998}, NULL,
>>>> 8) = 0
>>>> rt_sigaction(SIGRT_1, {0xb7d95efe, [RTMIN], SA_RESTORER, 0xb7dac998},
>>>> NULL, 8) = 0
>>>> rt_sigaction(SIGRT_2, {0xb7d9562a, [], SA_RESTORER, 0xb7dac998}, NULL,
>>>> 8) = 0
>>>> rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
>>>> rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
>>>> --- SIGSEGV (Segmentation fault) @ 0 (0) ---
>>>> +++ killed by SIGSEGV +++
>>>>
>>>>
>>>>
>>>> Kind regards,
>>>>
>>>> Siamak Haschemi
>>>>
>>>> Siamak Haschemi schrieb:
>>>>> Hello,
>>>>>
>>>>> as you seen here (https://issues.apache.org/jira/browse/THRIFT-177),
I
>>>>> am trying to cross-compile Thrift for the OpenWRT platform
>>>>> (http://openwrt.org/), which is a Linux distribution for embedded devices.
>>>>>
>>>>> After a two-night-fight, my result are the following:
>>>>>
>>>>> - I've created a OpenWRT package for thrift (see the attachment if you
>>>>> are interested).
>>>>> - I've successfully compiled the cpp-library (which results in
>>>>> libthrift, libthriftz and libthriftnb)
>>>>> - For now, I will not cross-compile the thrift-compiler since I will
>>>>> compile the thrift definition files on my PC.
>>>>>
>>>>> Coming to this point, I was very happy and I thought that the story
>>>>> ends, but now I am faced with a problem I cannot solve myself:
>>>>>
>>>>> For testing my cross-compilation result, I cross-compiled the cpp-part
>>>>> of the thrift tutorial. I installed the cross-compiled libraries on the
>>>>> target device and start the CppServer and the only reaction was
>>>>> "Segmentation Fault" :-(
>>>>>
>>>>>
>>>>> I tried to backtrack the problem and I came to the finding, that a
>>>>> simple hello world program, which is linked to my cross-compiled
>>>>> thrift-library, causes the "Segmentation Fault". Without linking the
>>>>> thrift-library, everything is O.K.
>>>>>
>>>>>
>>>>> =======================
>>>>> ------------
>>>>> Hello.cpp
>>>>> ------------
>>>>>
>>>>> #include <iostream>
>>>>>
>>>>> using namespace std;
>>>>>
>>>>> int main(int argc, char **argv) {
>>>>>   printf("Hello World!\n");
>>>>>   return 0;
>>>>> }
>>>>>
>>>>> 1) First try
>>>>>
>>>>> $ i386-linux-uclibc-g++ -L${LIB_DIR} -levent *-lthrift* -o Hello Hello.cpp
>>>>>
>>>>> On the target device:
>>>>>
>>>>> root@OpenWrt:~# ./Hello
>>>>> Segmentation fault
>>>>>
>>>>> 2) Second try
>>>>>
>>>>> $ i386-linux-uclibc-g++ -L${LIB_DIR} -levent -o Hello Hello.cpp
>>>>>
>>>>> On the target device:
>>>>>
>>>>> root@OpenWrt:~# ./Hello
>>>>> Hello World!
>>>>>
>>>>> ======================
>>>>>
>>>>> I will try to debug it with gdb, but I'm not an expert in this.
>>>>>
>>>>>
>>>>> So, please, can someone help me?
>>>>>
>>>>>
>>>>>
>>>>> Kind regards,
>>>>>
>>>>> Siamak Haschemi
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>

Mime
  • Unnamed multipart/mixed (inline, None, 0 bytes)
View raw message