]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[tables] Add ability to declare static table start and end markers
authorMichael Brown <mcb30@ipxe.org>
Mon, 14 Feb 2022 13:13:37 +0000 (13:13 +0000)
committerMichael Brown <mcb30@ipxe.org>
Mon, 14 Feb 2022 13:21:09 +0000 (13:21 +0000)
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>
src/include/ipxe/tables.h

index 28a87da9671ecbf099ce00a9025350c495398f0f..de5b1f297e2ebb23d8c4e9e96912ade4c57e0748 100644 (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
  *