Boost::coroutine2 and compiling for ASAN problems
Team, I'm trying to get a simple coroutine2 program to work with address sanitizer and I'm running into a block. I'm building boost_1_78_0 as follows: ./b2 context-impl=ucontext and compiling with -DBOOST_USE_ASAN and -DBOOST_USE_CONTEXT. I've built and rebuilt the library thinking I've made an error somewhere and it boils down to jump_fcontext and make_fcontext. What am I doing wrong/missing? Cheers, TJ g++ -DBOOST_USE_ASAN -DBOOST_USE_UCONTEXT -I/home/tjisana/Downloads/boost_1_78_0 -O0 -g3 -fsanitize=address -pedantic -Wall -c -fmessage-length=0 -o src/Testbed II.o ../src/Testbed II.cpp g++ -L/home/tjisana/Downloads/boost_1_78_0/stage/lib -fsanitize=address -o Testbed II src/Testbed II.o -lboost_context -lboost_coroutine /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: /home/tjisana/Downloads/boost_1_78_0/stage/lib/libboost_coroutine.so: undefined reference to `jump_fcontext' /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: /home/tjisana/Downloads/boost_1_78_0/stage/lib/libboost_coroutine.so: undefined reference to `make_fcontext' collect2: error: ld returned 1 exit status #include <queue> #include <memory> #include "boost/coroutine2/coroutine.hpp" typedef boost::coroutines2::coroutine<int> coro_t; int main() { int l = 0; std::queue<int> y({1,2,3,4}); std::queue<std::unique_ptr<int>> w; coro_t::push_type sink([&](coro_t::pull_type& source) { for (const auto& i : source) { while (!w.empty()) { auto ptr = std::move(w.front()); w.pop(); if (*ptr == 1) { std::cout << "first: " << i << std::endl; auto item = 21; w.push(std::move(std::make_unique<int>(item))); } else if (*ptr == 21) { std::cout << "second: " << i+2*i << std::endl; auto item = 32; w.push(std::move(std::make_unique<int>(item))); } else if (*ptr == 32) { std::cout << "third: " << i*i << std::endl; } } } source(); }); while (!y.empty()) { if (!y.empty()) { l = y.front(); y.pop(); w.push(std::move(std::make_unique<int>(1))); sink(l); } } return 0; }
It's a linker error - the linker doesn't sees the jump_fcontext(). tjisana (泰志) via Boost-users <boost-users@lists.boost.org> schrieb am Mi., 16. Feb. 2022, 10:17:
Team,
I'm trying to get a simple coroutine2 program to work with address sanitizer and I'm running into a block. I'm building boost_1_78_0 as follows: ./b2 context-impl=ucontext and compiling with -DBOOST_USE_ASAN and -DBOOST_USE_CONTEXT. I've built and rebuilt the library thinking I've made an error somewhere and it boils down to jump_fcontext and make_fcontext. What am I doing wrong/missing?
Cheers,
TJ
g++ -DBOOST_USE_ASAN -DBOOST_USE_UCONTEXT -I/home/tjisana/Downloads/boost_1_78_0 -O0 -g3 -fsanitize=address -pedantic -Wall -c -fmessage-length=0 -o src/Testbed II.o ../src/Testbed II.cpp g++ -L/home/tjisana/Downloads/boost_1_78_0/stage/lib -fsanitize=address -o Testbed II src/Testbed II.o -lboost_context -lboost_coroutine /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: /home/tjisana/Downloads/boost_1_78_0/stage/lib/libboost_coroutine.so: undefined reference to `jump_fcontext' /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: /home/tjisana/Downloads/boost_1_78_0/stage/lib/libboost_coroutine.so: undefined reference to `make_fcontext' collect2: error: ld returned 1 exit status
#include <queue>
#include <memory>
#include "boost/coroutine2/coroutine.hpp"
typedef boost::coroutines2::coroutine<int> coro_t;
int main() {
int l = 0;
std::queue<int> y({1,2,3,4});
std::queue<std::unique_ptr<int>> w;
coro_t::push_type sink([&](coro_t::pull_type& source) {
for (const auto& i : source) {
while (!w.empty()) {
auto ptr = std::move(w.front());
w.pop();
if (*ptr == 1) {
std::cout << "first: " << i << std::endl;
auto item = 21;
w.push(std::move(std::make_unique<int>(item)));
}
else if (*ptr == 21) {
std::cout << "second: " << i+2*i << std::endl;
auto item = 32;
w.push(std::move(std::make_unique<int>(item)));
}
else if (*ptr == 32) {
std::cout << "third: " << i*i << std::endl;
}
}
}
source();
});
while (!y.empty()) {
if (!y.empty()) {
l = y.front();
y.pop();
w.push(std::move(std::make_unique<int>(1)));
sink(l);
}
}
return 0;
} _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
That was such a low-grade, I need a swift-kick-in-the-pants flub - apologies! T. On Wed, Feb 16, 2022 at 4:58 AM Oliver Kowalke via Boost-users < boost-users@lists.boost.org> wrote:
It's a linker error - the linker doesn't sees the jump_fcontext().
tjisana (泰志) via Boost-users <boost-users@lists.boost.org> schrieb am Mi., 16. Feb. 2022, 10:17:
Team,
I'm trying to get a simple coroutine2 program to work with address sanitizer and I'm running into a block. I'm building boost_1_78_0 as follows: ./b2 context-impl=ucontext and compiling with -DBOOST_USE_ASAN and -DBOOST_USE_CONTEXT. I've built and rebuilt the library thinking I've made an error somewhere and it boils down to jump_fcontext and make_fcontext. What am I doing wrong/missing?
Cheers,
TJ
g++ -DBOOST_USE_ASAN -DBOOST_USE_UCONTEXT -I/home/tjisana/Downloads/boost_1_78_0 -O0 -g3 -fsanitize=address -pedantic -Wall -c -fmessage-length=0 -o src/Testbed II.o ../src/Testbed II.cpp g++ -L/home/tjisana/Downloads/boost_1_78_0/stage/lib -fsanitize=address -o Testbed II src/Testbed II.o -lboost_context -lboost_coroutine /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: /home/tjisana/Downloads/boost_1_78_0/stage/lib/libboost_coroutine.so: undefined reference to `jump_fcontext' /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: /home/tjisana/Downloads/boost_1_78_0/stage/lib/libboost_coroutine.so: undefined reference to `make_fcontext' collect2: error: ld returned 1 exit status
#include <queue>
#include <memory>
#include "boost/coroutine2/coroutine.hpp"
typedef boost::coroutines2::coroutine<int> coro_t;
int main() {
int l = 0;
std::queue<int> y({1,2,3,4});
std::queue<std::unique_ptr<int>> w;
coro_t::push_type sink([&](coro_t::pull_type& source) {
for (const auto& i : source) {
while (!w.empty()) {
auto ptr = std::move(w.front());
w.pop();
if (*ptr == 1) {
std::cout << "first: " << i << std::endl;
auto item = 21;
w.push(std::move(std::make_unique<int>(item)));
}
else if (*ptr == 21) {
std::cout << "second: " << i+2*i << std::endl;
auto item = 32;
w.push(std::move(std::make_unique<int>(item)));
}
else if (*ptr == 32) {
std::cout << "third: " << i*i << std::endl;
}
}
}
source();
});
while (!y.empty()) {
if (!y.empty()) {
l = y.front();
y.pop();
w.push(std::move(std::make_unique<int>(1)));
sink(l);
}
}
return 0;
} _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (3)
-
Oliver Kowalke
-
tjisana (泰志)
-
Vinnie Falco