trap tt=0x80 using the connect() socket routine

Aitor Viana aitor.viana.sanchez at esa.int
Tue Nov 13 09:52:03 UTC 2007


Hi all,

I am trying to use TCP sockets for LEON2 processor. I got a C++ class
(working perfectly under linue) wrapping all the network calls for
sockets. The problem is that when I use this class over RTEMS, i got
the tt=0x80 trap (which i think is the floating unit exception) within
the connect() call. The code is:

bool Socket::connect ( const std::string host, const int port )
{
	assert(m_sock != -1);

	if ( ! is_valid() ) return false;

	m_addr.sin_family = AF_INET;
	m_addr.sin_port = htons ( port );

	int status = inet_pton ( AF_INET, host.c_str(), &m_addr.sin_addr );

	if ( errno == EAFNOSUPPORT ) return false;

	status = ::connect ( m_sock, ( sockaddr * ) &m_addr, sizeof ( m_addr
) );  <------------------- inside this routine the trap is raised

	if ( status == 0 )
		return true;
	else
		return false;
}

Looks like the connect() function performs some operations where the
FPU is needed and the FPU on the LEON2 processor is not activated and
so the exception is raised. I don't know how RTEMS manage the FPU. I
guess it is deactivated at the beginning but, is it activated in the
first FPU trap? Do I have to activate it explicity? Do I have to
inform RTEMS such a way that my application is using the FPU?

Cheers,

Aitor



More information about the users mailing list