Date: Thu, 02 Jan 2003 21:25:11 -0800 From: Tim Kientzle <kientzle@acm.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: devd, crunchgen, C++, and /rescue Message-ID: <3E151EB7.2050003@acm.org> References: <3E134AB2.8030401@acm.org> <20030102.195102.106545644.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> Tim Kientzle <kientzle@acm.org> writes:
> : Does anyone know how to get crunchgen to play nicely with C++ programs?
M. Warner Losh asks:
> What's the problem.
Using crunchgen directly gives the expected linkage problems:
# cat test.conf
srcdirs /usr/src/sbin
progs devd
libs -ll
# crunchgen -q test.conf
Run "make -f test.mk" to build crunched binary.
# make -f test.mk
(cd /usr/src/sbin/devd && make depend && make devd.o token.o parse.o)
`devd.o' is up to date.
`token.o' is up to date.
`parse.o' is up to date.
cc -O -pipe -mcpu=pentiumpro -c test.c
echo "int _crunched_devd_stub(int argc, char **argv, char **envp){return
main(argc,argv,envp);}" >devd_stub.c
cc -O -pipe -mcpu=pentiumpro -c devd_stub.c
ld -dc -r -o devd.lo devd_stub.o /usr/src/sbin/devd/devd.o
/usr/src/sbin/devd/token.o /usr/src/sbin/devd/parse.o
crunchide -k _crunched_devd_stub devd.lo
cc -static -o test test.o devd.lo -ll
devd.lo: In function `event_proc::~event_proc()':
devd.lo(.text+0x223): undefined reference to `operator delete(void*)'
devd.lo: In function `action::action(char const*)':
devd.lo(.text+0x347): undefined reference to `std::string::string(char const*,
std::allocator<char> const&)'
devd.lo: In function `action::action(char const*)':
.... 230 additional lines of errors deleted ...
Attempting to re-link with c++ instead of cc
gives just one error (this would be the obvious
change to 'crunchgen' if it worked):
# c++ -static -o test test.o devd.lo -ll
/usr/lib/libstdc++.a(locale-inst.o): In function `std::money_get<char,
std::istreambuf_iterator<char, std::char_traits<char> >
>::do_get(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, bool, std::ios_base&,
std::_Ios_Iostate&, std::string&) const':
locale-inst.o(.gnu.linkonce.t._ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs+0xa44):
undefined reference to `unsigned const& std::min<unsigned>(unsigned const&,
unsigned const&)'
For the record,
cd /usr/src/sbin/devd && make clean && make
works just fine on this machine, so I'm reasonably
confident that the compiler, libs, etc, are all
correctly installed.
This one has me stumped. Any ideas?
Tim
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E151EB7.2050003>
