Fix bitcode support for kernel

This commit is contained in:
Lionel Sambuc 2014-08-21 13:35:45 +02:00 committed by Gerrit Code Review
parent 5f8eb6fb0c
commit 5f5dcc545f
5 changed files with 21 additions and 14 deletions

View file

@ -24,9 +24,9 @@ SECTIONS
. += _kern_offset; . += _kern_offset;
. = ALIGN(4096); usermapped_start = .; . = ALIGN(4096); usermapped_start = .;
.usermapped_glo : AT(ADDR(.usermapped_glo) - _kern_offset) { usermapped_glo*.o(*) } .usermapped_glo : AT(ADDR(.usermapped_glo) - _kern_offset) { *(.usermapped_glo) }
. = ALIGN(4096); usermapped_nonglo_start = .; . = ALIGN(4096); usermapped_nonglo_start = .;
.usermapped : AT(ADDR(.usermapped) - _kern_offset) { usermapped_*.o(*) } .usermapped : AT(ADDR(.usermapped) - _kern_offset) { *(.usermapped) }
. = ALIGN(4096); usermapped_end = .; . = ALIGN(4096); usermapped_end = .;
.text : AT(ADDR(.text) - _kern_offset) { *(.text*) } .text : AT(ADDR(.text) - _kern_offset) { *(.text*) }
_etext = .; _etext = .;
@ -47,5 +47,4 @@ SECTIONS
{ {
*(.ARM.exidx*) *(.ARM.exidx*)
} }
} }

View file

@ -16,15 +16,15 @@ SECTIONS
.unpaged_text : { unpaged_*.o(.text) } .unpaged_text : { unpaged_*.o(.text) }
.unpaged_data ALIGN(4096) : { unpaged_*.o(.data .rodata*) } .unpaged_data ALIGN(4096) : { unpaged_*.o(.data .rodata*) }
.unpaged_bss ALIGN(4096) : { unpaged_*.o(.bss COMMON) } .unpaged_bss ALIGN(4096) : { unpaged_*.o(.bss COMMON) }
__k_unpaged__kern_unpaged_end = .; __k_unpaged__kern_unpaged_end = .;
. += _kern_offset; . += _kern_offset;
. = ALIGN(4096); usermapped_start = .; . = ALIGN(4096); usermapped_start = .;
.usermapped_glo : AT(ADDR(.usermapped_glo) - _kern_offset) { usermapped_glo*.o(*) } .usermapped_glo : AT(ADDR(.usermapped_glo) - _kern_offset) { *(.usermapped_glo) }
. = ALIGN(4096); usermapped_nonglo_start = .; . = ALIGN(4096); usermapped_nonglo_start = .;
.usermapped : AT(ADDR(.usermapped) - _kern_offset) { usermapped_*.o(*) } .usermapped : AT(ADDR(.usermapped) - _kern_offset) { *(.usermapped) }
. = ALIGN(4096); usermapped_end = .; . = ALIGN(4096); usermapped_end = .;
.text : AT(ADDR(.text) - _kern_offset) { *(.text*) } .text : AT(ADDR(.text) - _kern_offset) { *(.text*) }
.data ALIGN(4096) : AT(ADDR(.data) - _kern_offset) { *(.data .rodata* ) } .data ALIGN(4096) : AT(ADDR(.data) - _kern_offset) { *(.data .rodata* ) }

View file

@ -1,7 +1,7 @@
#include "kernel/kernel.h" #include "kernel/kernel.h"
#include "arch_proto.h" #include "arch_proto.h"
struct minix_ipcvecs minix_ipcvecs_softint = { struct minix_ipcvecs minix_ipcvecs_softint __section(".usermapped") = {
.send = usermapped_send_softint, .send = usermapped_send_softint,
.receive = usermapped_receive_softint, .receive = usermapped_receive_softint,
.sendrec = usermapped_sendrec_softint, .sendrec = usermapped_sendrec_softint,
@ -11,7 +11,7 @@ struct minix_ipcvecs minix_ipcvecs_softint = {
.senda = usermapped_senda_softint .senda = usermapped_senda_softint
}; };
struct minix_ipcvecs minix_ipcvecs_sysenter = { struct minix_ipcvecs minix_ipcvecs_sysenter __section(".usermapped") = {
.send = usermapped_send_sysenter, .send = usermapped_send_sysenter,
.receive = usermapped_receive_sysenter, .receive = usermapped_receive_sysenter,
.sendrec = usermapped_sendrec_sysenter, .sendrec = usermapped_sendrec_sysenter,
@ -21,7 +21,7 @@ struct minix_ipcvecs minix_ipcvecs_sysenter = {
.senda = usermapped_senda_sysenter .senda = usermapped_senda_sysenter
}; };
struct minix_ipcvecs minix_ipcvecs_syscall = { struct minix_ipcvecs minix_ipcvecs_syscall __section(".usermapped") = {
.send = usermapped_send_syscall, .send = usermapped_send_syscall,
.receive = usermapped_receive_syscall, .receive = usermapped_receive_syscall,
.sendrec = usermapped_sendrec_syscall, .sendrec = usermapped_sendrec_syscall,

View file

@ -1,6 +1,14 @@
#include <minix/ipcconst.h> #include <minix/ipcconst.h>
#include <machine/asm.h> #include <machine/asm.h>
/* Redefine _ENTRY to put the following function in the section
* ".usermapped_glo". */
#undef _ENTRY
#define _ENTRY(x) \
_ALIGN_TEXT; .globl x; .type x,@function; x:
.section .usermapped_glo, "wax", @progbits
/**========================================================================* */ /**========================================================================* */
/* IPC assembly routines * */ /* IPC assembly routines * */
/**========================================================================* */ /**========================================================================* */

View file

@ -1,11 +1,11 @@
#include "kernel/kernel.h" #include "kernel/kernel.h"
/* This is the user-visible struct that has pointers to other bits of data. */ /* This is the user-visible struct that has pointers to other bits of data. */
struct minix_kerninfo minix_kerninfo; struct minix_kerninfo minix_kerninfo __section(".usermapped");
/* Kernel information structures. */ /* Kernel information structures. */
struct kinfo kinfo; /* kernel information for users */ struct kinfo kinfo __section(".usermapped"); /* kernel information for users */
struct machine machine; /* machine information for users */ struct machine machine __section(".usermapped"); /* machine information for users */
struct kmessages kmessages; /* diagnostic messages in kernel */ struct kmessages kmessages __section(".usermapped"); /* diagnostic messages in kernel */
struct loadinfo loadinfo; /* status of load average */ struct loadinfo loadinfo __section(".usermapped"); /* status of load average */