Changeset f2ffad4 in mainline


Ignore:
Timestamp:
2005-05-12T20:37:03Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
da79d0fd
Parents:
ea3fb2e
Message:

For each architecture, add function/macro FADDR that calculates absolute address of a function referenced by void (* f)(void).
IA-32 and MIPS gcc's use direct addressing (f == FADDR(f)) while IA-64 gcc uses indirect addressing (f != FADDR(f)).

Tweaks in IA-64 Makefile.inc to declare constant gp and main Makefile to consider ASFLAGS when compiling .s targets.

Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/Makefile.inc

    rea3fb2e rf2ffad4  
    88LD=$(IA-64_BINUTILS_DIR)/$(IA-64_TARGET)-ld
    99
    10 ASFLAGS=-EL
     10ASFLAGS=-mconstant-gp
    1111
    1212DEFS=-DARCH=$(ARCH)
    1313CPPFLAGS=$(DEFS) -nostdinc -I../include
    14 CFLAGS=$(CPPFLAGS) -nostdlib -fno-builtin -Wmissing-prototypes -Werror -O3
    15 LFLAGS=-EL -M -no-check-sections -T ../arch/ia64/_link.ld
     14CFLAGS=$(CPPFLAGS) -mconstant-gp -nostdlib -fno-builtin -Wmissing-prototypes -Werror -O3
     15LFLAGS=-EL -M -T ../arch/ia64/_link.ld
    1616
    1717arch_sources= \
     
    2323        arch/fpu_context.c \
    2424        arch/context.S
    25        
    26 
  • src/Makefile

    rea3fb2e rf2ffad4  
    7777
    7878%.o: %.s
    79         $(AS) $< -o $@
     79        $(AS) $(ASFLAGS) $< -o $@
    8080
    8181%.o: %.c
  • src/main/main.c

    rea3fb2e rf2ffad4  
    5454
    5555#include <arch.h>
     56#include <arch/faddr.h>
    5657
    5758char *project = "SPARTAN kernel";
     
    9596        context_save(&ctx);
    9697        ctx.sp = config.base + config.kernel_size - 8;
    97         ctx.pc = (__address) main_bsp_separated_stack;
     98        ctx.pc = FADDR(main_bsp_separated_stack);
    9899        context_restore(&ctx);
    99100        /* not reached */
     
    193194         */
    194195        CPU->saved_context.sp = (__address) &CPU->stack[CPU_STACK_SIZE-8];
    195         CPU->saved_context.pc = (__address) main_ap_separated_stack;
     196        CPU->saved_context.pc = FADDR(main_ap_separated_stack);
    196197        context_restore(&CPU->saved_context);
    197198        /* not reached */
  • src/proc/scheduler.c

    rea3fb2e rf2ffad4  
    4242#include <mm/page.h>
    4343#include <synch/spinlock.h>
     44#include <arch/faddr.h>
    4445
    4546#ifdef __SMP__
     
    233234        context_save(&CPU->saved_context);
    234235        CPU->saved_context.sp = (__address) &CPU->stack[CPU_STACK_SIZE-8];
    235         CPU->saved_context.pc = (__address) scheduler_separated_stack;
     236        CPU->saved_context.pc = FADDR(scheduler_separated_stack);
    236237        context_restore(&CPU->saved_context);
    237238        /* not reached */
  • src/proc/thread.c

    rea3fb2e rf2ffad4  
    4949#include <arch/interrupt.h>
    5050#include <smp/ipi.h>
     51#include <arch/faddr.h>
    5152
    5253char *thread_states[] = {"Invalid", "Running", "Sleeping", "Ready", "Entering", "Exiting"};
     
    165166               
    166167                context_save(&t->saved_context);
    167                 t->saved_context.pc = (__address) cushion;
     168                t->saved_context.pc = FADDR(cushion);
    168169                t->saved_context.sp = (__address) &t->kstack[THREAD_STACK_SIZE-8];
    169170
Note: See TracChangeset for help on using the changeset viewer.