[ECOS] Help With CYG_HAL_TABLEs

Jay Foster jay.foster@systech.com
Fri Oct 17 18:38:00 GMT 2003


I'm trying to use the CYG_HAL_TABLE macros to implement an extensible table.
My table entries aren't getting added to the table.  I first suspected that
the linker was removing them, since there are no references to them, but I'm
not so sure, since other tables, such as the DEVTAB table encounter the same
situation, yet its entries get added.

In a header file, I declare the following:

#include <cyg/hal/hal_tables.h>
typedef struct myentry
{
	STUFF HERE
} CYG_HAL_TABLE_TYPE myentry_t;

extern myentry_t __MYTABLE__[], __MYTABLE_END__;
#define MYTABLE_ENTRY(_l, arg, arg) \
myentry_t _l CYG_HAL_TABLE_ENTRY(myentrytype) = { \
	arg, \
	arg \
}

In a source file, I do:

#include <header file>
CYG_HAL_TABLE_BEGIN( __MYTABLE__, myentrytype );
CYG_HAL_TABLE_END( __MYTABLE_END__, myentrytype );


myentry_t *p;
for (p=&(__MYTABLE__[0]; p!=&(__MYTABLE_END__); p++
{
	stuff
}

In another source file, I do:
#include <header file>
MYTABLE_ENTRY(l0, stuff);
MYTABLE_ENTRY(l1, stuff);
etc.


In my symbol table, I find entries for __MYTABLE__ and __MYTABLE_END__, but
no symbols in between for the table entries (l0, l1, etc.).  There are no
references to the table entry labels, so I suspected the linker was removing
them.  Other tables don't suffer from this, so I'm thinking it's something
else.  What, I don't know.  For example, in my symbol table I see:

	__DEVTAB__
	haldiag_io0
	__DEVTAB_END__

yet there are no references to haldiag_io0, except for the DEVTAB_ENTRY()
macro.

Jay


-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss



More information about the Ecos-discuss mailing list