Use the same treatment as in linker_set.h for the __start and __stop

symbols of the set_vnet and set_pcpu sections, so those symbols will
always be emitted in kernel modules, if they use vnet.h or pcpu.h.

Also, for pcpu.h, make the __(start|stop)_set_pcpu declarations, and
associated macros invisible to userland, to prevent it picking up these
symbols.

Reviewed by:	kib
This commit is contained in:
dim 2010-11-11 19:18:52 +00:00
parent 2175fbcfd1
commit 2c7257916f
2 changed files with 8 additions and 0 deletions

View File

@ -95,7 +95,9 @@ struct vnet {
* Location of the kernel's 'set_vnet' linker set.
*/
extern uintptr_t *__start_set_vnet;
__GLOBL(__start_set_vnet);
extern uintptr_t *__stop_set_vnet;
__GLOBL(__stop_set_vnet);
#define VNET_START (uintptr_t)&__start_set_vnet
#define VNET_STOP (uintptr_t)&__stop_set_vnet

View File

@ -42,11 +42,15 @@
#include <sys/resource.h>
#include <machine/pcpu.h>
#ifdef _KERNEL
/*
* Define a set for pcpu data.
*/
extern uintptr_t *__start_set_pcpu;
__GLOBL(__start_set_pcpu);
extern uintptr_t *__stop_set_pcpu;
__GLOBL(__stop_set_pcpu);
/*
* Array of dynamic pcpu base offsets. Indexed by id.
@ -127,6 +131,8 @@ extern uintptr_t dpcpu_off[];
} \
} while(0)
#endif /* _KERNEL */
/*
* XXXUPS remove as soon as we have per cpu variable
* linker sets and can define rm_queue in _rm_lock.h