-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
s390/kernel: build a relocatable kernel
This patch adds support for building a relocatable kernel with -fPIE. The kernel will be relocated to 0 early in the boot process. Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> Reviewed-by: Philipp Rudo <prudo@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
- Loading branch information
Gerald Schaefer
authored and
Martin Schwidefsky
committed
Apr 29, 2019
1 parent
833b441
commit 805bc0b
Showing
11 changed files
with
124 additions
and
42 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 |
---|---|---|
@@ -0,0 +1,2 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
#include "../kernel/machine_kexec_reloc.c" |
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 |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
#include <linux/elf.h> | ||
|
||
int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val, | ||
unsigned long addr) | ||
{ | ||
switch (r_type) { | ||
case R_390_NONE: | ||
break; | ||
case R_390_8: /* Direct 8 bit. */ | ||
*(u8 *)loc = val; | ||
break; | ||
case R_390_12: /* Direct 12 bit. */ | ||
*(u16 *)loc &= 0xf000; | ||
*(u16 *)loc |= val & 0xfff; | ||
break; | ||
case R_390_16: /* Direct 16 bit. */ | ||
*(u16 *)loc = val; | ||
break; | ||
case R_390_20: /* Direct 20 bit. */ | ||
*(u32 *)loc &= 0xf00000ff; | ||
*(u32 *)loc |= (val & 0xfff) << 16; /* DL */ | ||
*(u32 *)loc |= (val & 0xff000) >> 4; /* DH */ | ||
break; | ||
case R_390_32: /* Direct 32 bit. */ | ||
*(u32 *)loc = val; | ||
break; | ||
case R_390_64: /* Direct 64 bit. */ | ||
*(u64 *)loc = val; | ||
break; | ||
case R_390_PC16: /* PC relative 16 bit. */ | ||
*(u16 *)loc = (val - addr); | ||
break; | ||
case R_390_PC16DBL: /* PC relative 16 bit shifted by 1. */ | ||
*(u16 *)loc = (val - addr) >> 1; | ||
break; | ||
case R_390_PC32DBL: /* PC relative 32 bit shifted by 1. */ | ||
*(u32 *)loc = (val - addr) >> 1; | ||
break; | ||
case R_390_PC32: /* PC relative 32 bit. */ | ||
*(u32 *)loc = (val - addr); | ||
break; | ||
case R_390_PC64: /* PC relative 64 bit. */ | ||
*(u64 *)loc = (val - addr); | ||
break; | ||
case R_390_RELATIVE: | ||
*(unsigned long *) loc = val; | ||
break; | ||
default: | ||
return 1; | ||
} | ||
return 0; | ||
} |
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