
1.  Add a reservation file to check that shared libs aren't overlapping.
{ get people to use it }

2.  Add (for now) a scan for which compiler is in force; try to get at
a 9.5 one. Look for /etc/default/cc -- if not there, is a 9.52 one.
If is there, use cc -v9.52.

3.  Add automatic null stack code (might be 10.6 problem).

4.  Add support for late-bound objects.
   a simple one would use the "C" namespace -
   shl_{NAME}_load(), shl_{NAME}_unload().
   a better one would use the XIP to register a small
   name space (service class), which could be mapped against
   the application:

struct shlib_srv {
	char           status;
	struct u_bind *u_bind;
};
#define LIBMAX  32 
shlib_srv init_list[] {};

shl_addsrv(struct u_bind *u)
{
	int         i;
	for (i=0; i < LIBMAX && init_list[i].status; i++);
	if (i == LIBMAX) {
		errno = ELIBMAX;
		return -1;
	}
	init_list[i].status = 1;
	init_list[i].u_bind = u;
	return 0;
}

shl_bind(char *name)
{
	int         n;
	for (i=0; i < LIBMAX; i++) {
		if (init_list[i].status == 1 &&
		    strcmp(name, init_list[i].u_bind->u_regname) == 0) {
		    	if ((n=_sho_open(init_list[i]->u_bind)) != -1)
		    		init_list[i].status = 2;
		    	return n;
		}
	}
	errno = ELIBACC;
	return -1;
}


The xib code would be:

xib_SHLIB()
{
	shl_addsrv(&u_bind);
#ifdef AUTO_START
	if (shl_bind(u_bind.u_regname) == -1) {
		char      sname[256];
		strcpy(sname, "ABORT: CANNOT MOUNT SHARED LIBRARY (");
		strcat(strcat(sname, strerror(errno), ")\n");
		qnx_exit_with_msg(sname);
		return -1;
	}
#endif
}

