주로 64비트 Solaris 개발을 많이 하게 되는데, sunfreeware 에서는 32비트 gdb 패키지만 제공한다. 그래서 직접 컴파일 해보기로 했다.
가장 중요한 부분이다.
1) ./configure ==> 일반적인 32비트 컴파일
2) CC="gcc -m64" ./configure ==> 일반적인 64비트 컴파일
64비트 컴파일을 위해 2)번 방식을 사용했는데 make를 하면 에러가 나온다. 이 때부터 구글 검색이 시작되었다. ㅋㅋㅋ
결론은
3) CC="gcc -m64" ./configure --disable-tui
이렇게 configure를 수행하니 잘 된다. tui가 뭐하는 녀석인지 모르겠지만 컴파일이 안되게한 원흉임이 분명하다.
$ CC="gcc -m64" ./configure --disable-tui
checking build system type... sparc-sun-solaris2.10
checking host system type... sparc-sun-solaris2.10
checking target system type... sparc-sun-solaris2.10
checking for a BSD-compatible install... /usr/local/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /usr/local/bin/sed
checking for gawk... no
...
2. make, make install
생략...
3. 간단한 gdb 사용...
간단히 버그를 내포한 코드를 빌드한다. -m64는 64비트 빌드를 의미하고, -g는 디버깅을 위한 옵션이다. 코드 내용은 생략한다.
$ gcc -g -m64 test.c -o test
$ ./test
세그멘테이션 결함(Segmentation Fault)(코어 덤프)
$ ls
a.out core gdb test test.c
hk9:/src1/hk9/test$ gdb -c core test
GNU gdb (GDB) 7.0
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
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 "sparc-sun-solaris2.10".
For bug reporting instructions, please see:
Reading symbols from /src1/hk9/test/test...done.
warning: exec file is newer than core file.
Reading symbols from /usr/lib/sparcv9/libc.so.1...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
[New Thread 1 (LWP 1)]
Loaded symbols for /usr/lib/sparcv9/libc.so.1
Reading symbols from /platform/SUNW,Sun-Fire-V440/lib/sparcv9/libc_psr.so.1...(no debugging symbols found)...done.
Loaded symbols for /platform/SUNW,Sun-Fire-V440/lib/sparcv9/libc_psr.so.1
Reading symbols from /lib/sparcv9/ld.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/sparcv9/ld.so.1
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
#0 0xffffffff7f2371b8 in strlen () from /usr/lib/sparcv9/libc.so.1
(gdb) where
#0 0xffffffff7f2371b8 in strlen () from /usr/lib/sparcv9/libc.so.1
#1 0xffffffff7f29f968 in _ndoprnt () from /usr/lib/sparcv9/libc.so.1
#2 0xffffffff7f2a1b9c in printf () from /usr/lib/sparcv9/libc.so.1
#3 0x000000010000085c in main () at test.c:5
(gdb)