Index: kernel/dmotor.c =================================================================== RCS file: /cvsroot/brickos/brickos/kernel/dmotor.c,v retrieving revision 1.9 diff -u -r1.9 dmotor.c --- kernel/dmotor.c 9 Jan 2004 01:44:56 -0000 1.9 +++ kernel/dmotor.c 13 Aug 2004 23:28:08 -0000 @@ -69,7 +69,7 @@ extern void dm_handler(void); #ifndef DOXYGEN_SHOULD_SKIP_THIS __asm__("\n\ -.section .text.hi\n\ +.section .text\n\ .align 1\n\ .global _dm_handler\n\ _dm_handler:\n\ Index: kernel/lnp-logical.c =================================================================== RCS file: /cvsroot/brickos/brickos/kernel/lnp-logical.c,v retrieving revision 1.6 diff -u -r1.6 lnp-logical.c --- kernel/lnp-logical.c 13 Dec 2002 14:12:01 -0000 1.6 +++ kernel/lnp-logical.c 13 Aug 2004 23:28:08 -0000 @@ -104,10 +104,10 @@ //! the byte received interrupt handler // #ifdef CONF_RCX_COMPILER -static void rx_handler(void) { +__TEXT_HI__ static void rx_handler(void) { #else HANDLER_WRAPPER("rx_handler","rx_core"); -void rx_core(void) { +__TEXT_HI__ void rx_core(void) { #endif time_t new_tx; lnp_timeout_reset(); @@ -138,10 +138,10 @@ //! the receive error interrupt handler // #ifdef CONF_RCX_COMPILER -static void rxerror_handler(void) { +__TEXT_HI__ static void rxerror_handler(void) { #else HANDLER_WRAPPER("rxerror_handler","rxerror_core"); -void rxerror_core(void) { +__TEXT_HI__ void rxerror_core(void) { #endif time_t new_tx; if(tx_state= *((volatile time_t*)&allow_tx); } -static wakeup_t write_complete(wakeup_t data) { +__TEXT_HI__ static wakeup_t write_complete(wakeup_t data) { return *((volatile signed char*)&tx_state) +#ifndef __TEXT_HI__ +#define __TEXT_HI__ +#endif /////////////////////////////////////////////////////////////////////////////// // @@ -132,9 +135,9 @@ #define lnp_checksum_step(sum,d) (unsigned char)((sum) += (d)) #ifdef CONF_HOST -unsigned char lnp_checksum_copy( unsigned char *dest, - const unsigned char *data, - unsigned length ) +__TEXT_HI__ unsigned char lnp_checksum_copy( unsigned char *dest, + const unsigned char *data, + unsigned length ) { unsigned char a = 0xff; unsigned char t; @@ -174,7 +177,7 @@ //! send a LNP integrity layer packet of given length /*! \return 0 on success. */ -int lnp_integrity_write(const unsigned char *data,unsigned char length) { +__TEXT_HI__ int lnp_integrity_write(const unsigned char *data,unsigned char length) { int r; #if defined(CONF_MM) char* buffer_ptr = malloc(length+3); @@ -195,7 +198,7 @@ //! send a LNP addressing layer packet of given length /*! \return 0 on success. */ -int lnp_addressing_write(const unsigned char *data,unsigned char length, +__TEXT_HI__ int lnp_addressing_write(const unsigned char *data,unsigned char length, unsigned char dest,unsigned char srcport) { int r; #if defined(CONF_MM) @@ -258,7 +261,7 @@ } //! receive a byte, decoding LNP packets with a state machine. -void lnp_integrity_byte(unsigned char b) { +__TEXT_HI__ void lnp_integrity_byte(unsigned char b) { static unsigned char buffer[256+3]; static int bytesRead,endOfData; static unsigned char chk; @@ -382,7 +385,6 @@ { lnp_rcx_message = (lnp_rcx_temp1 > 2) ? 3 : lnp_rcx_temp1; } - else #endif { // Invoke remote handler if any @@ -442,10 +444,10 @@ //! reset the integrity layer on error or timeout. #if defined(CONF_RCX_COMPILER) || defined(CONF_HOST) -void lnp_integrity_reset(void) { +__TEXT_HI__ void lnp_integrity_reset(void) { #else HANDLER_WRAPPER("lnp_integrity_reset","lnp_integrity_reset_core"); -void lnp_integrity_reset_core(void) { +__TEXT_HI__ void lnp_integrity_reset_core(void) { #endif #ifndef CONF_HOST if(tx_state>TX_IDLE) { @@ -469,16 +471,16 @@ //! return whether a packet is currently being received /*! \return 1 if yes, else zero */ -int lnp_integrity_active(void) { +__TEXT_HI__ int lnp_integrity_active(void) { return lnp_integrity_state!=LNPwaitHeader; } //! reset the inter-byte timeout counter. #if defined(CONF_RCX_COMPILER) || defined(CONF_HOST) -void lnp_timeout_reset(void) { +__TEXT_HI__ void lnp_timeout_reset(void) { #else HANDLER_WRAPPER("lnp_timeout_reset","lnp_timeout_reset_core"); -void lnp_timeout_reset_core(void) { +__TEXT_HI__ void lnp_timeout_reset_core(void) { #endif lnp_timeout_counter=lnp_timeout; } @@ -486,14 +488,14 @@ //! set the inter-byte timeout and reset the timeout counter to that value. /*! \param timeout the new timeout value */ -void lnp_timeout_set(unsigned short timeout) { +__TEXT_HI__ void lnp_timeout_set(unsigned short timeout) { lnp_timeout_counter=lnp_timeout=timeout; } //! Initialise protocol handlers /*! Adressing port 0 is reserved for the program handler. */ -void lnp_init(void) { +__TEXT_HI__ void lnp_init(void) { int k; for(k=1; k<=LNP_PORTMASK; k++) @@ -509,14 +511,14 @@ } #ifdef CONF_RCX_MESSAGE -wakeup_t msg_received(wakeup_t m) { +__TEXT_HI__ wakeup_t msg_received(wakeup_t m) { return (m == 0 ? lnp_rcx_message != 0 : lnp_rcx_message == m); } //! send a standard firmware message /*! \return 0 on success. */ -int send_msg(unsigned char msg) +__TEXT_HI__ int send_msg(unsigned char msg) { int r; #if defined(CONF_MM) Index: kernel/program.c =================================================================== RCS file: /cvsroot/brickos/brickos/kernel/program.c,v retrieving revision 1.8 diff -u -r1.8 program.c --- kernel/program.c 24 Sep 2002 03:10:06 -0000 1.8 +++ kernel/program.c 13 Aug 2004 23:28:08 -0000 @@ -158,7 +158,7 @@ } //! packet command parser task -static int packet_consumer(int argc, char *argv[]) { +__TEXT_HI__ static int packet_consumer(int argc, char *argv[]) { packet_cmd_t cmd; unsigned char nr=0; program_t *prog=programs; // to avoid a silly warning @@ -494,7 +494,7 @@ #if defined(CONF_LR_HANDLER) //! handle remote key input (P1-P5, A1-C1, A2-C2, stop, beep) -int lrkey_handler(unsigned int etype, unsigned int key) { +__TEXT_HI__ int lrkey_handler(unsigned int etype, unsigned int key) { unsigned char pnr = 0; // If a program is running, stop it @@ -635,7 +635,7 @@ //! initialize program support /*! run in single tasking mode */ -void program_init() { +__TEXT_HI__ void program_init() { packet_len=0; sem_init(&packet_sem,0,0); execi(&packet_consumer,0,0,PRIO_HIGHEST,DEFAULT_STACK_SIZE); @@ -654,7 +654,7 @@ //! shutdown program support /*! run in single tasking mode */ -void program_shutdown() { +__TEXT_HI__ void program_shutdown() { lnp_addressing_set_handler(0,LNP_DUMMY_ADDRESSING); sem_destroy(&packet_sem); Index: kernel/tm.c =================================================================== RCS file: /cvsroot/brickos/brickos/kernel/tm.c,v retrieving revision 1.11 diff -u -r1.11 tm.c --- kernel/tm.c 9 Jan 2004 01:44:56 -0000 1.11 +++ kernel/tm.c 13 Aug 2004 23:28:08 -0000 @@ -435,7 +435,13 @@ } td->tflags = 0; - if ((size_t)code_start < (size_t)&mm_start) + + //! the high memory segment + extern char __text_hi, __etext_hi; + + if ((size_t)code_start < (size_t)&mm_start + || ((size_t)code_start > (size_t)&__text_hi + && (size_t)code_start < (size_t)&__etext_hi)) { td->tflags |= T_KERNEL; nb_system_tasks++;