交叉链是我用crosstool_NG做的,非常简单好用,具体实现可以参考我之前写的文章。
下载源码后得到gdb-7.4目录,自己再新建一个build_gdb-7.4目录:
drwxr-xr-x 12 qj rebi 4096 2012-12-18 20:22 build_gdb-7.4/
drwxr-xr-x 15 qj rebi 4096 2012-12-18 19:52 gdb-7.4/
进入build_gdb-7.4目录执行configure:
../gdb-7.4/configure --prefix=/home/qj/tools/build_gdb-7.4/install --host=arm-linux CC=arm-unknown-linux-gnueabi-gcc LD=arm-unknown-linux-gnueabi-ld AR=arm-unknown-linux-gnueabi-ar LDFLAGS=Wl,-dynamic-linker=/data/app/ld-linux.so.3
之后make
make install
会在build_gdb-7.4目录下生成install目录,把gdb拷走就行了。
可以看到,gdb依赖于如下这几个动态库,所以需要从交叉链的目录下搜索到这几个库也一同上传到手机上。当然,ld-linux.so.3也是必须的。
qj@king:~/x-tools$ readelf -a gdb | grep library
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
通过下面的命令可以确认一下,我们指定的linker是否正确:
qj@king:~/x-tools$ readelf -l gdb
Elf file type is EXEC (Executable file)
Entry point 0xb66c
There are 10 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
EXIDX 0x3618d8 0x003698d8 0x003698d8 0x008f8 0x008f8 R 0x4
PHDR 0x000034 0x00008034 0x00008034 0x00140 0x00140 R E 0x4
INTERP 0x000174 0x00008174 0x00008174 0x00018 0x00018 R 0x1
[Requesting program interpreter: /data/app/ld-linux.so.3]
LOAD 0x000000 0x00008000 0x00008000 0x3621d4 0x3621d4 R E 0x8000
LOAD 0x362ef4 0x00372ef4 0x00372ef4 0x091a8 0x23c9c RW 0x8000
DYNAMIC 0x362f00 0x00372f00 0x00372f00 0x00100 0x00100 RW 0x4
NOTE 0x00018c 0x0000818c 0x0000818c 0x00020 0x00020 R 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
GNU_RELRO 0x362ef4 0x00372ef4 0x00372ef4 0x0010c 0x0010c R 0x1
LOOS+5041580 0x000000 0x00000000 0x00000000 0x00000 0x00000 0x4
Section to Segment mapping:
Segment Sections...
00 .ARM.exidx
01
02 .interp
03 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.extab .ARM.exidx .eh_frame
04 .init_array .fini_array .jcr .dynamic .got .data .bss
05 .dynamic
06 .note.ABI-tag
07
08 .init_array .fini_array .jcr .dynamic
09
qj@king:~/x-tools$
PS:后来经过测试,用同样的方法gdb7.5也顺利移植到我的I9100上去了。我估计对其它Android平台来说应该是一样的通用。