This repository has been archived by the owner on Jun 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MIPS: Initial implementation of a VDSO
Add an initial implementation of a proper (i.e. an ELF shared library) VDSO. With this commit it does not export any symbols, it only replaces the current signal return trampoline page. A later commit will add user implementations of gettimeofday()/clock_gettime(). To support both new toolchains and old ones which don't generate ABI flags section, we define its content manually and then use a tool (genvdso) to patch up the section to have the correct name and type. genvdso also extracts symbol offsets ({,rt_}sigreturn) needed by the kernel, and generates a C file containing a "struct mips_vdso_image" containing both the VDSO data and these offsets. This C file is compiled into the kernel. On 64-bit kernels we require a different VDSO for each supported ABI, so we may build up to 3 different VDSOs. The VDSO to use is selected by the mips_abi structure. A kernel/user shared data page is created and mapped below the VDSO image. This is currently empty, but will be used by the user time function implementations which are added later. [[email protected]: - Add more comments - Move abi detection in genvdso.h since it's the get_symbol function that needs it. - Add an R6 specific way to calculate the base address of VDSO in order to avoid the branch instruction which affects performance. - Do not patch .gnu.attributes since it's not needed for dynamic linking. - Simplify Makefile a little bit. - checkpatch fixes - Restrict VDSO support for binutils < 2.25 for pre-R6 - Include atomic64.h for O32 variant on MIPS64] Signed-off-by: Alex Smith <[email protected]> Signed-off-by: Markos Chandras <[email protected]> Cc: Matthew Fortune <[email protected]> Cc: [email protected] Patchwork: https://patchwork.linux-mips.org/patch/11337/ Signed-off-by: Ralf Baechle <[email protected]>
- Loading branch information
1 parent
22773aa
commit ebb5e78
Showing
19 changed files
with
1,114 additions
and
124 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,70 @@ | ||
/* | ||
* This file is subject to the terms and conditions of the GNU General Public | ||
* License. See the file "COPYING" in the main directory of this archive | ||
* for more details. | ||
* Copyright (C) 2015 Imagination Technologies | ||
* Author: Alex Smith <[email protected]> | ||
* | ||
* Copyright (C) 2009 Cavium Networks | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
*/ | ||
|
||
#ifndef __ASM_VDSO_H | ||
#define __ASM_VDSO_H | ||
|
||
#include <linux/types.h> | ||
#include <linux/mm_types.h> | ||
|
||
/** | ||
* struct mips_vdso_image - Details of a VDSO image. | ||
* @data: Pointer to VDSO image data (page-aligned). | ||
* @size: Size of the VDSO image data (page-aligned). | ||
* @off_sigreturn: Offset of the sigreturn() trampoline. | ||
* @off_rt_sigreturn: Offset of the rt_sigreturn() trampoline. | ||
* @mapping: Special mapping structure. | ||
* | ||
* This structure contains details of a VDSO image, including the image data | ||
* and offsets of certain symbols required by the kernel. It is generated as | ||
* part of the VDSO build process, aside from the mapping page array, which is | ||
* populated at runtime. | ||
*/ | ||
struct mips_vdso_image { | ||
void *data; | ||
unsigned long size; | ||
|
||
#ifdef CONFIG_32BIT | ||
struct mips_vdso { | ||
u32 signal_trampoline[2]; | ||
u32 rt_signal_trampoline[2]; | ||
unsigned long off_sigreturn; | ||
unsigned long off_rt_sigreturn; | ||
|
||
struct vm_special_mapping mapping; | ||
}; | ||
#else /* !CONFIG_32BIT */ | ||
struct mips_vdso { | ||
u32 o32_signal_trampoline[2]; | ||
u32 o32_rt_signal_trampoline[2]; | ||
u32 rt_signal_trampoline[2]; | ||
u32 n32_rt_signal_trampoline[2]; | ||
|
||
/* | ||
* The following structures are auto-generated as part of the build for each | ||
* ABI by genvdso, see arch/mips/vdso/Makefile. | ||
*/ | ||
|
||
extern struct mips_vdso_image vdso_image; | ||
|
||
#ifdef CONFIG_MIPS32_O32 | ||
extern struct mips_vdso_image vdso_image_o32; | ||
#endif | ||
|
||
#ifdef CONFIG_MIPS32_N32 | ||
extern struct mips_vdso_image vdso_image_n32; | ||
#endif | ||
|
||
/** | ||
* union mips_vdso_data - Data provided by the kernel for the VDSO. | ||
* | ||
* This structure contains data needed by functions within the VDSO. It is | ||
* populated by the kernel and mapped read-only into user memory. | ||
* | ||
* Note: Care should be taken when modifying as the layout must remain the same | ||
* for both 64- and 32-bit (for 32-bit userland on 64-bit kernel). | ||
*/ | ||
union mips_vdso_data { | ||
struct { | ||
}; | ||
|
||
u8 page[PAGE_SIZE]; | ||
}; | ||
#endif /* CONFIG_32BIT */ | ||
|
||
#endif /* __ASM_VDSO_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/* | ||
* Copyright (C) 2015 Imagination Technologies | ||
* Author: Alex Smith <[email protected]> | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
*/ | ||
|
||
#ifndef __ASM_AUXVEC_H | ||
#define __ASM_AUXVEC_H | ||
|
||
/* Location of VDSO image. */ | ||
#define AT_SYSINFO_EHDR 33 | ||
|
||
#endif /* __ASM_AUXVEC_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.