[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 )); \ __attribute__ (( unused )); \
__table_entries; } ) __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 * Get start of linker table
* *
@ -270,6 +281,14 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/ */
#define table_start( table ) __table_entries ( table, 00 ) #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 * Get end of linker table
* *
@ -288,6 +307,14 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/ */
#define table_end( table ) __table_entries ( table, 99 ) #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 * Get number of entries in linker table
* *