mirror of https://github.com/ipxe/ipxe.git
Allow access to variables in .text16 as well as .data16. Chained
interrupt vectors, for example, will be easiest to handle if placed in .text16.pull/1/head
parent
c10d1aa9d7
commit
f8e087767b
|
@ -10,9 +10,11 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* 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 __data16( variable ) variable
|
||||||
|
#define __text16( variable ) variable
|
||||||
#define __use_data16( variable ) variable
|
#define __use_data16( variable ) variable
|
||||||
|
#define __use_text16( variable ) variable
|
||||||
|
|
||||||
/* Copy to/from base memory */
|
/* Copy to/from base memory */
|
||||||
|
|
||||||
|
|
|
@ -15,17 +15,26 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Access to variables in .data16 */
|
/* Access to variables in .data16 and .text16 */
|
||||||
extern char *data16;
|
extern char *data16;
|
||||||
|
extern char *text16;
|
||||||
|
|
||||||
#define __data16( variable ) \
|
#define __data16( variable ) \
|
||||||
_data16_ ## variable __asm__ ( #variable ) \
|
_data16_ ## variable __asm__ ( #variable ) \
|
||||||
__attribute__ (( section ( ".data16" ) ))
|
__attribute__ (( section ( ".data16" ) ))
|
||||||
|
|
||||||
|
#define __text16( variable ) \
|
||||||
|
_text16_ ## variable __asm__ ( #variable ) \
|
||||||
|
__attribute__ (( section ( ".text16" ) ))
|
||||||
|
|
||||||
#define __use_data16( variable ) \
|
#define __use_data16( variable ) \
|
||||||
( * ( ( typeof ( _data16_ ## variable ) * ) \
|
( * ( ( typeof ( _data16_ ## variable ) * ) \
|
||||||
& ( data16 [ ( size_t ) & ( _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 */
|
/* Variables in librm.S, present in the normal data segment */
|
||||||
extern uint16_t rm_sp;
|
extern uint16_t rm_sp;
|
||||||
extern uint16_t rm_ss;
|
extern uint16_t rm_ss;
|
||||||
|
|
|
@ -80,6 +80,9 @@ typedef struct {
|
||||||
* return foo;
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue