thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Reiss <dre...@facebook.com>
Subject Re: Use Thrift in the OpenWRT platform
Date Wed, 22 Oct 2008 19:31:50 GMT
Does the backtrace from the segfault ever get up into Thrift code,
or is it _pthread_cleanup_push_defer forever?  I suppose this might
be an incompatibility between Thrift and uClibc.

Siamak Haschemi wrote:
> 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
View raw message