commpage: randomize position of commpage
This patch introduces randomization of commpage position. From now on commpage table contains offsets from begining to of the commpage to the particular commpage entry. Similary addresses of symbols in ELF memory image "commpage" are just offsets from the begining of the commpage. This patch also updates KDL so that commpage entries are recognized and shown correctly in stack trace. An update of Debugger is yet to be done.
This commit is contained in:
@@ -18,8 +18,9 @@ extern "C" {
|
||||
status_t commpage_init(void);
|
||||
status_t commpage_init_post_cpus(void);
|
||||
void* allocate_commpage_entry(int entry, size_t size);
|
||||
void* fill_commpage_entry(int entry, const void* copyFrom, size_t size);
|
||||
addr_t fill_commpage_entry(int entry, const void* copyFrom, size_t size);
|
||||
image_id get_commpage_image();
|
||||
area_id clone_commpage_area(team_id team, void** address);
|
||||
|
||||
// implemented in the architecture specific part
|
||||
status_t arch_commpage_init(void);
|
||||
|
||||
@@ -52,6 +52,7 @@ struct signal_frame_data {
|
||||
int32 thread_flags;
|
||||
uint64 syscall_restart_return_value;
|
||||
uint8 syscall_restart_parameters[SYSCALL_RESTART_PARAMETER_SIZE];
|
||||
void* commpage_address;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -259,6 +259,8 @@ struct Team : TeamThreadIteratorEntry<team_id>, KernelReferenceable,
|
||||
size_t used_user_data;
|
||||
struct free_user_thread* free_user_threads;
|
||||
|
||||
void* commpage_address;
|
||||
|
||||
struct team_debug_info debug_info;
|
||||
|
||||
// protected by scheduler lock
|
||||
|
||||
@@ -34,7 +34,7 @@ void __init_env(const struct user_space_program_args *args);
|
||||
void __init_heap(void);
|
||||
void __init_heap_post_env(void);
|
||||
|
||||
void __init_time(void);
|
||||
void __init_time(addr_t commPageTable);
|
||||
void __arch_init_time(struct real_time_data *data, bool setDefaults);
|
||||
bigtime_t __arch_get_system_time_offset(struct real_time_data *data);
|
||||
bigtime_t __get_system_time_offset();
|
||||
|
||||
@@ -51,6 +51,7 @@ struct rld_export {
|
||||
void (*call_termination_hooks)();
|
||||
|
||||
const struct user_space_program_args *program_args;
|
||||
const void* commpage_address;
|
||||
};
|
||||
|
||||
extern struct rld_export *__gRuntimeLoader;
|
||||
|
||||
@@ -12,8 +12,4 @@
|
||||
//#define COMMPAGE_ENTRY_M68K_SYSCALL (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 0)
|
||||
//#define COMMPAGE_ENTRY_M68K_MEMCPY (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 1)
|
||||
|
||||
/* 0xffff0000 colides with IO space mapped with TT1 on Atari */
|
||||
#warning ARM: determine good place for compage..
|
||||
#define ARCH_USER_COMMPAGE_ADDR (0xfeff0000)
|
||||
|
||||
#endif /* _SYSTEM_ARCH_M68K_COMMPAGE_DEFS_H */
|
||||
|
||||
@@ -12,7 +12,4 @@
|
||||
#define COMMPAGE_ENTRY_M68K_SYSCALL (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 0)
|
||||
#define COMMPAGE_ENTRY_M68K_MEMCPY (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 1)
|
||||
|
||||
/* 0xffff0000 colides with IO space mapped with TT1 on Atari */
|
||||
#define ARCH_USER_COMMPAGE_ADDR (0xfeff0000)
|
||||
|
||||
#endif /* _SYSTEM_ARCH_M68K_COMMPAGE_DEFS_H */
|
||||
|
||||
@@ -14,7 +14,5 @@
|
||||
#define COMMPAGE_ENTRY_MIPSEL_SYSCALL (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 0)
|
||||
#define COMMPAGE_ENTRY_MIPSEL_MEMCPY (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 1)
|
||||
|
||||
#define ARCH_USER_COMMPAGE_ADDR (0xffff0000)
|
||||
|
||||
#endif /* _SYSTEM_ARCH_MIPSEL_COMMPAGE_DEFS_H */
|
||||
|
||||
|
||||
@@ -12,6 +12,4 @@
|
||||
#define COMMPAGE_ENTRY_PPC_SYSCALL (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 0)
|
||||
#define COMMPAGE_ENTRY_PPC_MEMCPY (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 1)
|
||||
|
||||
#define ARCH_USER_COMMPAGE_ADDR (0xffff0000)
|
||||
|
||||
#endif /* _SYSTEM_ARCH_PPC_COMMPAGE_DEFS_H */
|
||||
|
||||
@@ -19,6 +19,4 @@
|
||||
#define COMMPAGE_ENTRY_X86_THREAD_EXIT \
|
||||
(COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 5)
|
||||
|
||||
#define ARCH_USER_COMMPAGE_ADDR (0xffff0000)
|
||||
|
||||
#endif /* _SYSTEM_ARCH_x86_COMMPAGE_DEFS_H */
|
||||
|
||||
@@ -16,6 +16,4 @@
|
||||
#define COMMPAGE_ENTRY_X86_THREAD_EXIT \
|
||||
(COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 3)
|
||||
|
||||
#define ARCH_USER_COMMPAGE_ADDR (0xffffffffffff0000)
|
||||
|
||||
#endif /* _SYSTEM_ARCH_x86_64_COMMPAGE_DEFS_H */
|
||||
|
||||
@@ -19,11 +19,6 @@
|
||||
#define COMMPAGE_SIGNATURE 'COMM'
|
||||
#define COMMPAGE_VERSION 1
|
||||
|
||||
#define USER_COMMPAGE_ADDR ARCH_USER_COMMPAGE_ADDR
|
||||
// set by the architecture specific implementation
|
||||
|
||||
#define USER_COMMPAGE_TABLE ((void**)(USER_COMMPAGE_ADDR))
|
||||
|
||||
#include <arch_commpage_defs.h>
|
||||
|
||||
#endif /* _SYSTEM_COMMPAGE_DEFS_H */
|
||||
|
||||
Reference in New Issue
Block a user