Allow access to variables in .text16 as well as .data16. Chained
authorMichael Brown <mcb30@etherboot.org>
Sat, 6 May 2006 18:57:31 +0000 (18:57 +0000)
committerMichael Brown <mcb30@etherboot.org>
Sat, 6 May 2006 18:57:31 +0000 (18:57 +0000)
interrupt vectors, for example, will be easiest to handle if placed in
.text16.

src/arch/i386/include/libkir.h
src/arch/i386/include/librm.h
src/arch/i386/include/realmode.h

index 44cb75e..28db830 100644 (file)
  *
  */
 
-/* Access to variables in .data16, in a way compatible with librm */
+/* Access to variables in .data16 and .text16 in a way compatible with librm */
 #define __data16( variable ) variable
+#define __text16( variable ) variable
 #define __use_data16( variable ) variable
+#define __use_text16( variable ) variable
 
 /* Copy to/from base memory */
 
index b4970c0..3a5d946 100644 (file)
  *
  */
 
-/* Access to variables in .data16 */
+/* Access to variables in .data16 and .text16 */
 extern char *data16;
+extern char *text16;
 
 #define __data16( variable )                                           \
        _data16_ ## variable __asm__ ( #variable )                      \
        __attribute__ (( section ( ".data16" ) ))
 
+#define __text16( variable )                                           \
+       _text16_ ## variable __asm__ ( #variable )                      \
+       __attribute__ (( section ( ".text16" ) ))
+
 #define __use_data16( variable )                                       \
        ( * ( ( typeof ( _data16_ ## variable ) * )                     \
              & ( data16 [ ( size_t ) & ( _data16_ ## variable ) ] ) ) )
 
+#define __use_text16( variable )                                       \
+       ( * ( ( typeof ( _text16_ ## variable ) * )                     \
+             & ( text16 [ ( size_t ) & ( _text16_ ## variable ) ] ) ) )
+
 /* Variables in librm.S, present in the normal data segment */
 extern uint16_t rm_sp;
 extern uint16_t rm_ss;
index b7f0dc9..fa8c786 100644 (file)
@@ -80,6 +80,9 @@ typedef struct {
  *     return foo;
  *   }
  *
+ * Variables may also be placed in .text16 using __text16 and
+ * __use_text16.  Some variables (e.g. chained interrupt vectors) fit
+ * most naturally in .text16; most should be in .data16.
  */
 
 /*