| Questions | Answers
|------------------------------------------------------|--------------------
| OS/arch/bits (mandatory) | FreeBSD
| Architecture/bits of the file (mandatory) | x86/32
| Error log | https://github.com/unixfreaxjp/malwaremustdie/blob/master/radare2test/FreeBSD-2019-057.md
| Problem affecting r2 versions | 3.7.1, 3.8.0, 3.9.0, and recent
| Problem description | ctype.c:14: error: redefinition of typedef 'RParseCType' - previous declaration of 'RParseCType' was in libr/include/r_parse.h:80 ; The typedef for RParseCType was coded in https://github.com/radareorg/radare2/commit/24d3a9cb5d5497c6bd59df9a22792339f873b594#diff-65addf422e419aaa267fbe7de38e57aa and being typedef'ED again in https://github.com/radareorg/radare2/commit/24d3a9cb5d5497c6bd59df9a22792339f873b594#diff-d070ab2cfdd810d61567be662fa72e87 ; this created the compile error; the coder was: (deleted)
| Workaround | don鈥檛 use ctype.c in libr/parser, comment it in meson script too.
Compiled successfully
Compilation/build failed with Error.
Please avoid double typedef 'RParseCType'
cc: @radare @xvilka @devnexen @unixfreaxjp
I see what I can do. I speak for myself here but "pointing finger" does not really help in my opinion.
I just want to let the coder know so he can avoid this in the future. I never want to "pointing", but, respecting your concern, I am deleting coder name then.
It is ok :-) there are more subtle way like cc him or anything ;-) but I was just voicing opinion I m just a casual contributor not a committer.
What would be helpful is the precise FreeBSD version I m a bit unsure which one it is in your side seems 9.2 builds ok.
Also compiler version is useful for these kinds of errors. In this case the error is obvious though.
This issue is fixed, thank's for cooperation by @thestr4ng3r in https://github.com/radareorg/radare2/commit/5a37bddbab37545bfafb5fc4858636f607f55ec9
Tested of successful compilation with this commit :
radare2 4.0.0-git 22801 @ freebsd-x86-32 git.3.9.0-20-gd112883
commit: d112883c5ad7309ca577373639281bb8e57d9988 build: 2019-09-20__21:11:02
Longer built successful PoC on FreeBSD legacy:
:
CC rafind2.c
LD rafind2
CC rarun2.c
LD rarun2
CC ragg2.c
LD ragg2
CC r2agent.c
LD r2agent
mkdir -p "/usr/share/man/man1"
mkdir -p "/usr/share/man/man7"
for FILE in r2-docker.1 r2agent.1 r2pm.1 rabin2.1 radare2.1 radiff2.1 rafind2.1 ragg2.1 rahash2.1 rarun2.1 rasm2.1 rax2.1 ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/man/$FILE" "/usr/share/man/man1/$FILE" ; done
cd "/usr/share/man/man1" && ln -fs radare2.1 r2.1
for FILE in *.7 ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/man/$FILE" "/usr/share/man/man7/$FILE" ; done
/usr/bin/install -d "/usr/share/doc/radare2"
for FILE in 3D all68k.r2 android.md avr.md bash_autocompletion.sh brainfuck.md calling-conventions.md capstone.md cows128.data crosscompile debug-internals.md debug.md dexdump.sh dospart dwarf-line.rsc emscripten.md esil.md flirt.md fortunes.creepy fortunes.fun fortunes.nsfw fortunes.tips freebsd.md gdb.md gprobe.md haiku.md hud ida.md images indent-example.c intro.md io-fixing.md io.md iocache ios.md iphone.md kvast.md lang-plugins license.md macos.md macros maemo.md node.js objc.pl oo.md openbsd.md pdb plugins.md portscan.r2 qnx.md r2ascii.txt r2pipe.html rap.md rapatch.md releases.md repo rgraph.md sandbox sdb_ordinal.md siol.md solaris.md static-plugins statis.md strings.md termux.md uncrustify.cfg vim vim2r2.js windbg.md windows.md yara.md zsh ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/doc/$FILE" "/usr/share/doc/radare2" ; done
for FILE in r_anal.pc r_asm.pc r_bin.pc r_bp.pc r_config.pc r_cons.pc r_core.pc r_crypto.pc r_debug.pc r_egg.pc r_flag.pc r_fs.pc r_hash.pc r_io.pc r_lang.pc r_magic.pc r_parse.pc r_reg.pc r_search.pc r_socket.pc r_syscall.pc r_util.pc ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/pkgcfg/$FILE" "/usr/lib/pkgconfig/$FILE" ; done
rm -rf "/usr/share/radare2/4.0.0-git/www"
rm -rf "/usr/lib/radare2/4.0.0-git/www" # old dir
mkdir -p "/usr/share/radare2/4.0.0-git/www"
for FILE in console.html d3 enyo f favicon.ico graph index.html index.old.html log.html m old p r2.svg rlogo.png t upload.html ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/shlr/www/$FILE" "/usr/share/radare2/4.0.0-git/www" ; done
for DIR in libr/cons/d libr/flag/d libr/bin/d libr/asm/d libr/syscall/d libr/magic/d libr/anal/d ; do (\
cd "$DIR" ; \
echo "$DIR" ; \
gmake install-symlink ); \
done
libr/cons/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/cons/d'
mkdir -p "/usr/share/radare2/4.0.0-git/cons"
for FILE in * ; do \
if [ $FILE != Makefile -a $FILE != meson.build -a -f $FILE ]; then \
ln -fs "/usr/home/TEST/radare/radare2-TEST/libr/cons/d/$FILE" "/usr/share/radare2/4.0.0-git/cons/$FILE" ; \
fi ; \
done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/cons/d'
libr/flag/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/flag/d'
rm -f *.r2
for a in alloc crypto dylib env fs network process stdout string threads time ; do b=$(echo `cat $a`); echo "ft $a $b" ; done > tags.r2
mkdir -p "/usr/share/radare2/4.0.0-git/flag"
ln -fs /usr/home/TEST/radare/radare2-TEST/libr/flag/d/tags.r2 /usr/share/radare2/4.0.0-git/flag/tags.r2
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/flag/d'
libr/bin/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/bin/d'
mkdir -p "/usr/share/radare2/4.0.0-git/format"
for FILE in * ; do \
if [ "$FILE" != Makefile ]; then \
ln -fs "/usr/home/TEST/radare/radare2-TEST/libr/bin/d/$FILE" "/usr/share/radare2/4.0.0-git/format/$FILE" ; \
fi ; \
done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/bin/d'
libr/asm/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/asm/d'
mkdir -p "/usr/share/radare2/4.0.0-git/opcodes"
for FILE in *.sdb ; do ln -fs "/usr/home/TEST/radare/radare2-TEST/libr/asm/d/$FILE" "/usr/share/radare2/4.0.0-git/opcodes/$FILE" ; done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/asm/d'
libr/syscall/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/syscall/d'
mkdir -p "/usr/share/radare2/4.0.0-git/syscall"
for FILE in *.sdb ; do ln -fs "/usr/home/TEST/radare/radare2-TEST/libr/syscall/d/$FILE" "/usr/share/radare2/4.0.0-git/syscall/$FILE" ; done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/syscall/d'
libr/magic/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/magic/d'
mkdir -p "/usr/share/radare2/4.0.0-git/magic"
for FILE in apple archive cafebabe code compressed database elf filesystems firmware flash freebsd gimp gpg html images java jpeg linux mach mail.news microsoft mime netbsd network openbsd pdf perl python riff sniffer sql ssh uuencode video vim vorbis zfs ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/libr/magic/d/default/$FILE" "/usr/share/radare2/4.0.0-git/magic/$FILE" ; \
done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/magic/d'
libr/anal/d
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr/anal/d'
cd ../../.. && mkdir -p "/usr/share/radare2/4.0.0-git/fcnsign" && \
for FILE in cc-arm-16.sdb cc-arm-32.sdb cc-arm-64.sdb cc-avr-8.sdb cc-hexagon-32.sdb cc-m68k-32.sdb cc-mips-32.sdb cc-mips-64.sdb cc-powerpc-32.sdb cc-powerpc-64.sdb cc-riscv-64.sdb cc-sparc-32.sdb cc-x86-16.sdb cc-x86-32.sdb cc-x86-64.sdb cc-xtensa-32.sdb spec.sdb types-16.sdb types-32.sdb types-64.sdb types-android.sdb types-arm-ios-16.sdb types-arm-ios-32.sdb types-arm-ios-64.sdb types-darwin.sdb types-linux.sdb types-windows.sdb types-x86-macos-64.sdb types-x86-windows-32.sdb types-x86-windows-64.sdb types.sdb; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/libr/anal/d/$FILE" "/usr/share/radare2/4.0.0-git/fcnsign/$FILE" ; \
done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr/anal/d'
cd libr && gmake install-symlink
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/libr'
gmake[2]: Entering directory '/usr/home/TEST/radare/radare2-TEST'
for FILE in r_anal.pc r_asm.pc r_bin.pc r_bp.pc r_config.pc r_cons.pc r_core.pc r_crypto.pc r_debug.pc r_egg.pc r_flag.pc r_fs.pc r_hash.pc r_io.pc r_lang.pc r_magic.pc r_parse.pc r_reg.pc r_search.pc r_socket.pc r_syscall.pc r_util.pc ; do \
ln -fs "/usr/home/TEST/radare/radare2-TEST/pkgcfg/$FILE" "/usr/lib/pkgconfig/$FILE" ; done
gmake[2]: Leaving directory '/usr/home/TEST/radare/radare2-TEST'
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/libr'
cd binr && gmake install-symlink
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/binr'
cd .. && \
mkdir -p "/usr/bin" && \
for BINARY in rax2 rasm2 rabin2 rahash2 radiff2 radare2 rafind2 rarun2 ragg2 r2agent ; do ln -fs "/usr/home/TEST/radare/radare2-TEST/binr/$BINARY/$BINARY" "/usr/bin/$BINARY" ; done
cd .. && ln -fs "/usr/home/TEST/radare/radare2-TEST/binr/r2pm/r2pm" "/usr/bin/r2pm"
cd .. && rm -rf "/usr/share/radare2/4.0.0-git/r2pm"
cd .. && mkdir -p "/usr/share/radare2/4.0.0-git/"
#ln -fs "/usr/home/TEST/radare/radare2-TEST/binr/r2pm/d" "/usr/share/radare2/4.0.0-git/r2pm"
cd .. && ln -fs "/usr/bin/radare2" "/usr/bin/r2"
cd .. && ln -fs "/usr/bin/radare2" "/usr/bin/r2p"
cd .. && ln -fs "/usr/home/TEST/radare/radare2-TEST/binr/preload/libr2.so" "/usr/lib/libr2.so"
cd .. && cd "/usr/lib" && \
mv libr2.so libr2.so.4.0.0-git && \
ln -fs libr2.so.4.0.0-git libr2.so
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/binr'
cd shlr && gmake install-symlink
gmake[1]: Entering directory '/usr/home/TEST/radare/radare2-TEST/shlr'
mkdir -p "/usr/lib"
#cd tcc ; for FILE in libr_tcc* ; do \
# ln -fs `pwd`/$FILE /usr/lib/$FILE ; done
gmake[1]: Leaving directory '/usr/home/TEST/radare/radare2-TEST/shlr'
mkdir -p "/usr/bin"
ln -fs "/usr/home/TEST/radare/radare2-TEST/sys/indent.sh" "/usr/bin/r2-indent"
ln -fs "/usr/home/TEST/radare/radare2-TEST/sys/r2-docker.sh" "/usr/bin/r2-docker"
mkdir -p "/usr/share/radare2/4.0.0-git/hud"
ln -fs "/usr/home/TEST/radare/radare2-TEST/doc/hud" "/usr/share/radare2/4.0.0-git/hud/main"
#mkdir -p "/usr/share/radare2/4.0.0-git/flag"
#ln -fs /usr/home/TEST/radare/radare2-TEST/libr/flag/d/tags.r2 "/usr/share/radare2/4.0.0-git/flag/tags.r2"
cd "/usr/lib/radare2/" ;\
rm -f last ; ln -fs 4.0.0-git last
cd "/usr/share/radare2/" ;\
rm -f last ; ln -fs 4.0.0-git last
mkdir -p "/usr/share/radare2/4.0.0-git/"
/bin/sh sys/ldconfig.sh
/bin/sh ./configure-plugins --rm-static //usr/lib/radare2/last/
configure-plugins: Loading ./plugins.cfg ..
Removed 0 shared plugins that are already static
$
$ r2 -v
radare2 4.0.0-git 22801 @ freebsd-x86-32 git.3.9.0-20-gd112883
commit: d112883c5ad7309ca577373639281bb8e57d9988 build: 2019-09-20__21:11:02
$ date
Fri Sep 20 21:18:29 JST 2019
$
Again, thank you for all cooperation to support FreeBSD!
Cc: @radare @XVilka @unixfreaxjp
No problem, FreeBSD is a platform we actually like to support (as opposed to another one starting with W)
Current tested STABLE version for Linux and FreeBSD servers:
radare2 4.0.0-git 23215 @ linux-x86-32 git.3.9.0-20-gd112883
commit: d112883c5ad7309ca577373639281bb8e57d9988 build: 2019-09-20__21:47:04
radare2 4.0.0-git 23226 @ freebsd-x86-32 git.3.9.0-20-gd112883
commit: d112883c5ad7309ca577373639281bb8e57d9988 build: 2019-09-20__21:55:04
radare2 4.0.0-git 23449 @ linux-x86-64 git.3.9.0-20-gd112883
commit: d112883c5ad7309ca577373639281bb8e57d9988 build: 2019-09-20__21:38:58
radare2 4.0.0-git 22926 @ freebsd-x86-64 git.3.9.0-20-gd112883c5
commit: d112883c5ad7309ca577373639281bb8e57d9988 build: 2019-09-20__12:53:49
Most helpful comment
No problem, FreeBSD is a platform we actually like to support (as opposed to another one starting with W)