[tables] Add ability to declare static table start and end markers

The compound statement expression within __table_entries() prevents
the use of top-level declarations such as

  static struct thing *things = table_start ( THINGS );

Define TABLE_START() and TABLE_END() macros that can be used as:

  static TABLE_START ( things_start, THINGS );
  static struct thing *things = things_start;

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/591/head
Michael Brown 2022-02-14 13:13:37 +00:00
parent 0bbd896783
commit 1150321595
1 changed files with 27 additions and 0 deletions

View File

@ -252,6 +252,17 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
__attribute__ (( unused )); \
__table_entries; } )
/**
* Declare start of linker table entries
*
* @v entries Start of entries
* @v table Linker table
* @v idx Sub-table index
*/
#define __TABLE_ENTRIES( entries, table, idx ) \
__table_type ( table ) entries[0] \
__table_entry ( table, idx )
/**
* Get start of linker table
*
@ -270,6 +281,14 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/
#define table_start( table ) __table_entries ( table, 00 )
/**
* Declare start of linker table
*
* @v start Start of linker table
* @v table Linker table
*/
#define TABLE_START( start, table ) __TABLE_ENTRIES ( start, table, 00 )
/**
* Get end of linker table
*
@ -288,6 +307,14 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/
#define table_end( table ) __table_entries ( table, 99 )
/**
* Declare end of linker table
*
* @v end End of linker table
* @v table Linker table
*/
#define TABLE_END( end, table ) __TABLE_ENTRIES ( end, table, 99 )
/**
* Get number of entries in linker table
*