* [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings
@ 2024-10-09 8:57 Tianjia Zhang
2024-10-09 11:07 ` Marc Zyngier
2024-10-16 6:19 ` kernel test robot
0 siblings, 2 replies; 8+ messages in thread
From: Tianjia Zhang @ 2024-10-09 8:57 UTC (permalink / raw)
To: Marc Zyngier, Oliver Upton, Joey Gouly, Suzuki K Poulose,
Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor,
Nick Desaulniers, Bill Wendling, Justin Stitt,
Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel,
llvm
Cc: Tianjia Zhang
This patch silent the some mismatch format build warnings
with clang, like:
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies
type 'unsigned long' but the argument has type 'Elf64_Off'
(aka 'unsigned long long') [-Wformat]
233 | assert_ne(off, 0UL, "%lu");
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| %llu
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne'
193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op'
187 | " failed (lhs=" fmt ", rhs=" fmt \
| ~~~
188 | ", line=%d)", _lhs, _rhs, __LINE__); \
| ^~~~
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error'
166 | fprintf(stderr, "error: %s: " fmt "\n", \
| ~~~
167 | elf.path, ## __VA_ARGS__); \
| ^~~~~~~~~~~
Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
---
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c
index b63f4e1c1033..0d916d91b13c 100644
--- a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c
+++ b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c
@@ -230,7 +230,7 @@ static inline const char *section_begin(Elf64_Shdr *shdr)
/* Find a section by its offset from the beginning of the file. */
static inline Elf64_Shdr *section_by_off(Elf64_Off off)
{
- assert_ne(off, 0UL, "%lu");
+ assert_ne(off, 0ULL, "%llu");
return elf_ptr(Elf64_Shdr, off);
}
@@ -276,7 +276,7 @@ static void init_elf(const char *path)
close(fd);
/* Get pointer to the ELF header. */
- assert_ge(stat.st_size, sizeof(*elf.ehdr), "%lu");
+ assert_ge(stat.st_size, (off_t)sizeof(*elf.ehdr), "%llu");
elf.ehdr = elf_ptr(Elf64_Ehdr, 0);
/* Check the ELF magic. */
@@ -340,7 +340,7 @@ static void emit_rela_abs64(Elf64_Rela *rela, const char *sh_orig_name)
* a symbol at the beginning of the relocated section, and <offset>
* is `rela->r_offset`.
*/
- printf(".reloc %lu, R_AARCH64_PREL32, %s%s + 0x%lx\n",
+ printf(".reloc %lu, R_AARCH64_PREL32, %s%s + 0x%llx\n",
reloc_offset, HYP_SECTION_SYMBOL_PREFIX, sh_orig_name,
elf64toh(rela->r_offset));
@@ -376,7 +376,7 @@ static void emit_rela_section(Elf64_Shdr *sh_rela)
uint32_t type = (uint32_t)elf64toh(rela->r_info);
/* Check that rela points inside the relocated section. */
- assert_lt(elf64toh(rela->r_offset), elf64toh(sh_orig->sh_size), "0x%lx");
+ assert_lt(elf64toh(rela->r_offset), elf64toh(sh_orig->sh_size), "0x%llx");
switch (type) {
/*
--
2.47.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-09 8:57 [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings Tianjia Zhang @ 2024-10-09 11:07 ` Marc Zyngier 2024-10-10 8:12 ` tianjia.zhang 2024-10-16 6:19 ` kernel test robot 1 sibling, 1 reply; 8+ messages in thread From: Marc Zyngier @ 2024-10-09 11:07 UTC (permalink / raw) To: Tianjia Zhang Cc: Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm On Wed, 09 Oct 2024 09:57:51 +0100, Tianjia Zhang <tianjia.zhang@linux.alibaba.com> wrote: > > This patch silent the some mismatch format build warnings > with clang, like: > > arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies > type 'unsigned long' but the argument has type 'Elf64_Off' > (aka 'unsigned long long') [-Wformat] > 233 | assert_ne(off, 0UL, "%lu"); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~ > | %llu > arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne' > 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ > arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op' > 187 | " failed (lhs=" fmt ", rhs=" fmt \ > | ~~~ > 188 | ", line=%d)", _lhs, _rhs, __LINE__); \ > | ^~~~ > arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error' > 166 | fprintf(stderr, "error: %s: " fmt "\n", \ > | ~~~ > 167 | elf.path, ## __VA_ARGS__); \ > | ^~~~~~~~~~~ > > Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> I don't see these warnings. What version of LLVM are you using? M. -- Without deviation from the norm, progress is not possible. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-09 11:07 ` Marc Zyngier @ 2024-10-10 8:12 ` tianjia.zhang 2024-10-10 13:03 ` Marc Zyngier 2024-10-10 15:23 ` Nick Desaulniers 0 siblings, 2 replies; 8+ messages in thread From: tianjia.zhang @ 2024-10-10 8:12 UTC (permalink / raw) To: Marc Zyngier, Nick Desaulniers Cc: Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm On 10/9/24 7:07 PM, Marc Zyngier wrote: > On Wed, 09 Oct 2024 09:57:51 +0100, > Tianjia Zhang <tianjia.zhang@linux.alibaba.com> wrote: >> >> This patch silent the some mismatch format build warnings >> with clang, like: >> >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies >> type 'unsigned long' but the argument has type 'Elf64_Off' >> (aka 'unsigned long long') [-Wformat] >> 233 | assert_ne(off, 0UL, "%lu"); >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~ >> | %llu >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne' >> 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op' >> 187 | " failed (lhs=" fmt ", rhs=" fmt \ >> | ~~~ >> 188 | ", line=%d)", _lhs, _rhs, __LINE__); \ >> | ^~~~ >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error' >> 166 | fprintf(stderr, "error: %s: " fmt "\n", \ >> | ~~~ >> 167 | elf.path, ## __VA_ARGS__); \ >> | ^~~~~~~~~~~ >> >> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> > > I don't see these warnings. What version of LLVM are you using? > I compiled the kernel on Apple Silicon M3 Pro in macOS 15.0.1, Maybe this is a special scenario that is rarely used. Details of clang: # clang --version Homebrew clang version 19.1.1 Target: arm64-apple-darwin24.0.0 Thread model: posix InstalledDir: /opt/homebrew/Cellar/llvm/19.1.1/bin Cheers, Tianjia ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-10 8:12 ` tianjia.zhang @ 2024-10-10 13:03 ` Marc Zyngier 2024-10-14 6:31 ` tianjia.zhang 2024-10-10 15:23 ` Nick Desaulniers 1 sibling, 1 reply; 8+ messages in thread From: Marc Zyngier @ 2024-10-10 13:03 UTC (permalink / raw) To: tianjia.zhang Cc: Nick Desaulniers, Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm On Thu, 10 Oct 2024 09:12:29 +0100, "tianjia.zhang" <tianjia.zhang@linux.alibaba.com> wrote: > > > > On 10/9/24 7:07 PM, Marc Zyngier wrote: > > On Wed, 09 Oct 2024 09:57:51 +0100, > > Tianjia Zhang <tianjia.zhang@linux.alibaba.com> wrote: > >> > >> This patch silent the some mismatch format build warnings > >> with clang, like: > >> > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies > >> type 'unsigned long' but the argument has type 'Elf64_Off' > >> (aka 'unsigned long long') [-Wformat] > >> 233 | assert_ne(off, 0UL, "%lu"); > >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~ > >> | %llu > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne' > >> 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) > >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op' > >> 187 | " failed (lhs=" fmt ", rhs=" fmt \ > >> | ~~~ > >> 188 | ", line=%d)", _lhs, _rhs, __LINE__); \ > >> | ^~~~ > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error' > >> 166 | fprintf(stderr, "error: %s: " fmt "\n", \ > >> | ~~~ > >> 167 | elf.path, ## __VA_ARGS__); \ > >> | ^~~~~~~~~~~ > >> > >> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> > > > > I don't see these warnings. What version of LLVM are you using? > > > > I compiled the kernel on Apple Silicon M3 Pro in macOS 15.0.1, Maybe this is > a special scenario that is rarely used. > > Details of clang: > > # clang --version > Homebrew clang version 19.1.1 > Target: arm64-apple-darwin24.0.0 > Thread model: posix > InstalledDir: /opt/homebrew/Cellar/llvm/19.1.1/bin What I have is similar enough: ClangBuiltLinux clang version 19.1.1 (https://github.com/llvm/llvm-project.git d401987fe349a87c53fe25829215b080b70c0c1a) Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /home/maz/hot-poop/llvm/llvm-19.1.1-aarch64/bin and yet this doesn't fire. Can you try with a compiler actually targeting with Linux instead of MacOS? Thanks, M. -- Without deviation from the norm, progress is not possible. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-10 13:03 ` Marc Zyngier @ 2024-10-14 6:31 ` tianjia.zhang 0 siblings, 0 replies; 8+ messages in thread From: tianjia.zhang @ 2024-10-14 6:31 UTC (permalink / raw) To: Marc Zyngier Cc: Nick Desaulniers, Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm Hi Marc, On 10/10/24 9:03 PM, Marc Zyngier wrote: > On Thu, 10 Oct 2024 09:12:29 +0100, > "tianjia.zhang" <tianjia.zhang@linux.alibaba.com> wrote: >> >> >> >> On 10/9/24 7:07 PM, Marc Zyngier wrote: >>> On Wed, 09 Oct 2024 09:57:51 +0100, >>> Tianjia Zhang <tianjia.zhang@linux.alibaba.com> wrote: >>>> >>>> This patch silent the some mismatch format build warnings >>>> with clang, like: >>>> >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies >>>> type 'unsigned long' but the argument has type 'Elf64_Off' >>>> (aka 'unsigned long long') [-Wformat] >>>> 233 | assert_ne(off, 0UL, "%lu"); >>>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> | %llu >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne' >>>> 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) >>>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op' >>>> 187 | " failed (lhs=" fmt ", rhs=" fmt \ >>>> | ~~~ >>>> 188 | ", line=%d)", _lhs, _rhs, __LINE__); \ >>>> | ^~~~ >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error' >>>> 166 | fprintf(stderr, "error: %s: " fmt "\n", \ >>>> | ~~~ >>>> 167 | elf.path, ## __VA_ARGS__); \ >>>> | ^~~~~~~~~~~ >>>> >>>> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> >>> >>> I don't see these warnings. What version of LLVM are you using? >>> >> >> I compiled the kernel on Apple Silicon M3 Pro in macOS 15.0.1, Maybe this is >> a special scenario that is rarely used. >> >> Details of clang: >> >> # clang --version >> Homebrew clang version 19.1.1 >> Target: arm64-apple-darwin24.0.0 >> Thread model: posix >> InstalledDir: /opt/homebrew/Cellar/llvm/19.1.1/bin > > What I have is similar enough: > > ClangBuiltLinux clang version 19.1.1 (https://github.com/llvm/llvm-project.git d401987fe349a87c53fe25829215b080b70c0c1a) > Target: aarch64-unknown-linux-gnu > Thread model: posix > InstalledDir: /home/maz/hot-poop/llvm/llvm-19.1.1-aarch64/bin > > and yet this doesn't fire. Can you try with a compiler actually > targeting with Linux instead of MacOS? > I downloaded the precompiled version, but it didn't compile properly, interrupted by other errors, which seemed to be different from the brew version: HOSTCC scripts/mod/modpost.o scripts/mod/modpost.c:16:10: fatal error: 'fnmatch.h' file not found 16 | #include <fnmatch.h> | ^~~~~~~~~~~ 1 error generated. Details of clang: clang version 19.1.1 (/Users/runner/work/llvm-project/llvm-project/clang d401987fe349a87c53fe25829215b080b70c0c1a) Target: arm64-apple-darwin24.0.0 Thread model: posix InstalledDir: /Users/tianjia/sbin/LLVM-19.1.1-macOS-ARM64/bin There is no verification yet whether this patch issue will be fire. The clang installed with brew can be compiled normally. Thanks, Tianjia ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-10 8:12 ` tianjia.zhang 2024-10-10 13:03 ` Marc Zyngier @ 2024-10-10 15:23 ` Nick Desaulniers 2024-10-14 6:50 ` tianjia.zhang 1 sibling, 1 reply; 8+ messages in thread From: Nick Desaulniers @ 2024-10-10 15:23 UTC (permalink / raw) To: tianjia.zhang Cc: Marc Zyngier, Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm On Thu, Oct 10, 2024 at 1:13 AM tianjia.zhang <tianjia.zhang@linux.alibaba.com> wrote: > > > > On 10/9/24 7:07 PM, Marc Zyngier wrote: > > On Wed, 09 Oct 2024 09:57:51 +0100, > > Tianjia Zhang <tianjia.zhang@linux.alibaba.com> wrote: > >> > >> This patch silent the some mismatch format build warnings > >> with clang, like: > >> > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies > >> type 'unsigned long' but the argument has type 'Elf64_Off' > >> (aka 'unsigned long long') [-Wformat] > >> 233 | assert_ne(off, 0UL, "%lu"); > >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~ > >> | %llu > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne' > >> 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) > >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op' > >> 187 | " failed (lhs=" fmt ", rhs=" fmt \ > >> | ~~~ > >> 188 | ", line=%d)", _lhs, _rhs, __LINE__); \ > >> | ^~~~ > >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error' > >> 166 | fprintf(stderr, "error: %s: " fmt "\n", \ > >> | ~~~ > >> 167 | elf.path, ## __VA_ARGS__); \ > >> | ^~~~~~~~~~~ > >> > >> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> > > > > I don't see these warnings. What version of LLVM are you using? > > > > I compiled the kernel on Apple Silicon M3 Pro in macOS 15.0.1, Maybe this is > a special scenario that is rarely used. Right, so I had an initial patch set for building the kernel from a MacOS host. I sent a v1, but didn't chase sending a v2 at the time because there didn't appear to be any interest. https://www.phoronix.com/news/Linux-Compile-On-macOS Since then, I saw a v2 or even a v3 fly by (I was cc'ed). One issue I recall building from MacOS was that MacOS does not have an <elf.h> (their object file format is not ELF, but Mach-O). I had to install some dependency through homebrew for that header. Just a guess but: Perhaps it defines Elf64_Off as a `unsigned long` incorrectly, and should be defining it as an `unsigned long long`. I'd check if that's the case and if so, Tianjia, you may want to report that issue on the thread where folks are reposting the MacOS host support. > > Details of clang: > > # clang --version > Homebrew clang version 19.1.1 > Target: arm64-apple-darwin24.0.0 > Thread model: posix > InstalledDir: /opt/homebrew/Cellar/llvm/19.1.1/bin > > Cheers, > Tianjia > -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-10 15:23 ` Nick Desaulniers @ 2024-10-14 6:50 ` tianjia.zhang 0 siblings, 0 replies; 8+ messages in thread From: tianjia.zhang @ 2024-10-14 6:50 UTC (permalink / raw) To: Nick Desaulniers Cc: Marc Zyngier, Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm Hi Nick, On 10/10/24 11:23 PM, Nick Desaulniers wrote: > On Thu, Oct 10, 2024 at 1:13 AM tianjia.zhang > <tianjia.zhang@linux.alibaba.com> wrote: >> >> >> >> On 10/9/24 7:07 PM, Marc Zyngier wrote: >>> On Wed, 09 Oct 2024 09:57:51 +0100, >>> Tianjia Zhang <tianjia.zhang@linux.alibaba.com> wrote: >>>> >>>> This patch silent the some mismatch format build warnings >>>> with clang, like: >>>> >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:2: warning: format specifies >>>> type 'unsigned long' but the argument has type 'Elf64_Off' >>>> (aka 'unsigned long long') [-Wformat] >>>> 233 | assert_ne(off, 0UL, "%lu"); >>>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> | %llu >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:34: note: expanded from macro 'assert_ne' >>>> 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) >>>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:188:19: note: expanded from macro 'assert_op' >>>> 187 | " failed (lhs=" fmt ", rhs=" fmt \ >>>> | ~~~ >>>> 188 | ", line=%d)", _lhs, _rhs, __LINE__); \ >>>> | ^~~~ >>>> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:167:17: note: expanded from macro 'fatal_error' >>>> 166 | fprintf(stderr, "error: %s: " fmt "\n", \ >>>> | ~~~ >>>> 167 | elf.path, ## __VA_ARGS__); \ >>>> | ^~~~~~~~~~~ >>>> >>>> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> >>> >>> I don't see these warnings. What version of LLVM are you using? >>> >> >> I compiled the kernel on Apple Silicon M3 Pro in macOS 15.0.1, Maybe this is >> a special scenario that is rarely used. > > Right, so I had an initial patch set for building the kernel from a > MacOS host. I sent a v1, but didn't chase sending a v2 at the time > because there didn't appear to be any interest. > > https://www.phoronix.com/news/Linux-Compile-On-macOS > > Since then, I saw a v2 or even a v3 fly by (I was cc'ed). > > One issue I recall building from MacOS was that MacOS does not have an > <elf.h> (their object file format is not ELF, but Mach-O). I had to > install some dependency through homebrew for that header. > > Just a guess but: > Perhaps it defines Elf64_Off as a `unsigned long` incorrectly, and > should be defining it as an `unsigned long long`. I'd check if that's > the case and if so, Tianjia, you may want to report that issue on the > thread where folks are reposting the MacOS host support. > Thanks for the information, great work, very useful attempt. I have successfully compiled the latest 6.11 rc2 on macOS 15.0.1 Apple Silicon M3 chip. It seems that compiling on this version of the kernel is easier. I just added three header files, elf.h, byteswap.h and endian.h, and add the missing definitions. In addition, I fixed scriptsj/mod/file2alias.c as you did, and it compiled successfully without encountering other exceptions. The dependent toolchains are all installed through brew, include make, llvm and lld. Cheers, Tianjia ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings 2024-10-09 8:57 [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings Tianjia Zhang 2024-10-09 11:07 ` Marc Zyngier @ 2024-10-16 6:19 ` kernel test robot 1 sibling, 0 replies; 8+ messages in thread From: kernel test robot @ 2024-10-16 6:19 UTC (permalink / raw) To: Tianjia Zhang, Marc Zyngier, Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon, Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt, Pierre-Clément Tosi, linux-arm-kernel, kvmarm, linux-kernel, llvm Cc: oe-kbuild-all, Tianjia Zhang Hi Tianjia, kernel test robot noticed the following build warnings: [auto build test WARNING on kvmarm/next] [also build test WARNING on linus/master v6.12-rc3 next-20241015] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Tianjia-Zhang/KVM-arm64-nVHE-gen-hyprel-Silent-build-warnings/20241009-170027 base: https://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git next patch link: https://lore.kernel.org/r/20241009085751.35976-1-tianjia.zhang%40linux.alibaba.com patch subject: [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings config: arm64-defconfig (https://download.01.org/0day-ci/archive/20241016/202410161313.tSgr3bAj-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 14.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241016/202410161313.tSgr3bAj-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202410161313.tSgr3bAj-lkp@intel.com/ All warnings (new ones prefixed by >>): arch/arm64/kvm/hyp/nvhe/gen-hyprel.c: In function 'section_by_off': >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:166:33: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 4 has type 'Elf64_Off' {aka 'long unsigned int'} [-Wformat=] 166 | fprintf(stderr, "error: %s: " fmt "\n", \ | ^~~~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:186:25: note: in expansion of macro 'fatal_error' 186 | fatal_error("assertion " #lhs " " #op " " #rhs \ | ^~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:193:41: note: in expansion of macro 'assert_op' 193 | #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:233:9: note: in expansion of macro 'assert_ne' 233 | assert_ne(off, 0ULL, "%llu"); | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c: In function 'init_elf': >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:166:33: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 4 has type '__off_t' {aka 'long int'} [-Wformat=] 166 | fprintf(stderr, "error: %s: " fmt "\n", \ | ^~~~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:186:25: note: in expansion of macro 'fatal_error' 186 | fatal_error("assertion " #lhs " " #op " " #rhs \ | ^~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:195:41: note: in expansion of macro 'assert_op' 195 | #define assert_ge(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, >=) | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:279:9: note: in expansion of macro 'assert_ge' 279 | assert_ge(stat.st_size, (off_t)sizeof(*elf.ehdr), "%llu"); | ^~~~~~~~~ >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:166:33: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 5 has type 'long int' [-Wformat=] 166 | fprintf(stderr, "error: %s: " fmt "\n", \ | ^~~~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:186:25: note: in expansion of macro 'fatal_error' 186 | fatal_error("assertion " #lhs " " #op " " #rhs \ | ^~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:195:41: note: in expansion of macro 'assert_op' 195 | #define assert_ge(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, >=) | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:279:9: note: in expansion of macro 'assert_ge' 279 | assert_ge(stat.st_size, (off_t)sizeof(*elf.ehdr), "%llu"); | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c: In function 'emit_rela_abs64': >> arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:343:59: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 5 has type '__uint64_t' {aka 'long unsigned int'} [-Wformat=] 343 | printf(".reloc %lu, R_AARCH64_PREL32, %s%s + 0x%llx\n", | ~~~^ | | | long long unsigned int | %lx arch/arm64/kvm/hyp/nvhe/gen-hyprel.c: In function 'emit_rela_section': arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:166:33: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 4 has type '__uint64_t' {aka 'long unsigned int'} [-Wformat=] 166 | fprintf(stderr, "error: %s: " fmt "\n", \ | ^~~~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:186:25: note: in expansion of macro 'fatal_error' 186 | fatal_error("assertion " #lhs " " #op " " #rhs \ | ^~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:194:41: note: in expansion of macro 'assert_op' 194 | #define assert_lt(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, <) | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:379:17: note: in expansion of macro 'assert_lt' 379 | assert_lt(elf64toh(rela->r_offset), elf64toh(sh_orig->sh_size), "0x%llx"); | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:166:33: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 5 has type '__uint64_t' {aka 'long unsigned int'} [-Wformat=] 166 | fprintf(stderr, "error: %s: " fmt "\n", \ | ^~~~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:186:25: note: in expansion of macro 'fatal_error' 186 | fatal_error("assertion " #lhs " " #op " " #rhs \ | ^~~~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:194:41: note: in expansion of macro 'assert_op' 194 | #define assert_lt(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, <) | ^~~~~~~~~ arch/arm64/kvm/hyp/nvhe/gen-hyprel.c:379:17: note: in expansion of macro 'assert_lt' 379 | assert_lt(elf64toh(rela->r_offset), elf64toh(sh_orig->sh_size), "0x%llx"); | ^~~~~~~~~ vim +166 arch/arm64/kvm/hyp/nvhe/gen-hyprel.c bc93763f178fd0 Marc Zyngier 2021-01-30 163 8c49b5d43d4c45 David Brazdil 2021-01-05 164 #define fatal_error(fmt, ...) \ 8c49b5d43d4c45 David Brazdil 2021-01-05 165 ({ \ 8c49b5d43d4c45 David Brazdil 2021-01-05 @166 fprintf(stderr, "error: %s: " fmt "\n", \ 8c49b5d43d4c45 David Brazdil 2021-01-05 167 elf.path, ## __VA_ARGS__); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 168 exit(EXIT_FAILURE); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 169 __builtin_unreachable(); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 170 }) 8c49b5d43d4c45 David Brazdil 2021-01-05 171 8c49b5d43d4c45 David Brazdil 2021-01-05 172 #define fatal_perror(msg) \ 8c49b5d43d4c45 David Brazdil 2021-01-05 173 ({ \ 8c49b5d43d4c45 David Brazdil 2021-01-05 174 fprintf(stderr, "error: %s: " msg ": %s\n", \ 8c49b5d43d4c45 David Brazdil 2021-01-05 175 elf.path, strerror(errno)); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 176 exit(EXIT_FAILURE); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 177 __builtin_unreachable(); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 178 }) 8c49b5d43d4c45 David Brazdil 2021-01-05 179 8c49b5d43d4c45 David Brazdil 2021-01-05 180 #define assert_op(lhs, rhs, fmt, op) \ 8c49b5d43d4c45 David Brazdil 2021-01-05 181 ({ \ 8c49b5d43d4c45 David Brazdil 2021-01-05 182 typeof(lhs) _lhs = (lhs); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 183 typeof(rhs) _rhs = (rhs); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 184 \ 8c49b5d43d4c45 David Brazdil 2021-01-05 185 if (!(_lhs op _rhs)) { \ 8c49b5d43d4c45 David Brazdil 2021-01-05 @186 fatal_error("assertion " #lhs " " #op " " #rhs \ 8c49b5d43d4c45 David Brazdil 2021-01-05 187 " failed (lhs=" fmt ", rhs=" fmt \ 8c49b5d43d4c45 David Brazdil 2021-01-05 188 ", line=%d)", _lhs, _rhs, __LINE__); \ 8c49b5d43d4c45 David Brazdil 2021-01-05 189 } \ 8c49b5d43d4c45 David Brazdil 2021-01-05 190 }) 8c49b5d43d4c45 David Brazdil 2021-01-05 191 8c49b5d43d4c45 David Brazdil 2021-01-05 192 #define assert_eq(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, ==) 8c49b5d43d4c45 David Brazdil 2021-01-05 @193 #define assert_ne(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, !=) 8c49b5d43d4c45 David Brazdil 2021-01-05 194 #define assert_lt(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, <) 8c49b5d43d4c45 David Brazdil 2021-01-05 @195 #define assert_ge(lhs, rhs, fmt) assert_op(lhs, rhs, fmt, >=) 8c49b5d43d4c45 David Brazdil 2021-01-05 196 8c49b5d43d4c45 David Brazdil 2021-01-05 197 /* 8c49b5d43d4c45 David Brazdil 2021-01-05 198 * Return a pointer of a given type at a given offset from 8c49b5d43d4c45 David Brazdil 2021-01-05 199 * the beginning of the ELF file. 8c49b5d43d4c45 David Brazdil 2021-01-05 200 */ 8c49b5d43d4c45 David Brazdil 2021-01-05 201 #define elf_ptr(type, off) ((type *)(elf.begin + (off))) 8c49b5d43d4c45 David Brazdil 2021-01-05 202 8c49b5d43d4c45 David Brazdil 2021-01-05 203 /* Iterate over all sections in the ELF. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 204 #define for_each_section(var) \ bc93763f178fd0 Marc Zyngier 2021-01-30 205 for (var = elf.sh_table; var < elf.sh_table + elf16toh(elf.ehdr->e_shnum); ++var) 8c49b5d43d4c45 David Brazdil 2021-01-05 206 8c49b5d43d4c45 David Brazdil 2021-01-05 207 /* Iterate over all Elf64_Rela relocations in a given section. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 208 #define for_each_rela(shdr, var) \ bc93763f178fd0 Marc Zyngier 2021-01-30 209 for (var = elf_ptr(Elf64_Rela, elf64toh(shdr->sh_offset)); \ bc93763f178fd0 Marc Zyngier 2021-01-30 210 var < elf_ptr(Elf64_Rela, elf64toh(shdr->sh_offset) + elf64toh(shdr->sh_size)); var++) 8c49b5d43d4c45 David Brazdil 2021-01-05 211 8c49b5d43d4c45 David Brazdil 2021-01-05 212 /* True if a string starts with a given prefix. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 213 static inline bool starts_with(const char *str, const char *prefix) 8c49b5d43d4c45 David Brazdil 2021-01-05 214 { 8c49b5d43d4c45 David Brazdil 2021-01-05 215 return memcmp(str, prefix, strlen(prefix)) == 0; 8c49b5d43d4c45 David Brazdil 2021-01-05 216 } 8c49b5d43d4c45 David Brazdil 2021-01-05 217 8c49b5d43d4c45 David Brazdil 2021-01-05 218 /* Returns a string containing the name of a given section. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 219 static inline const char *section_name(Elf64_Shdr *shdr) 8c49b5d43d4c45 David Brazdil 2021-01-05 220 { bc93763f178fd0 Marc Zyngier 2021-01-30 221 return elf.sh_string + elf32toh(shdr->sh_name); 8c49b5d43d4c45 David Brazdil 2021-01-05 222 } 8c49b5d43d4c45 David Brazdil 2021-01-05 223 8c49b5d43d4c45 David Brazdil 2021-01-05 224 /* Returns a pointer to the first byte of section data. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 225 static inline const char *section_begin(Elf64_Shdr *shdr) 8c49b5d43d4c45 David Brazdil 2021-01-05 226 { bc93763f178fd0 Marc Zyngier 2021-01-30 227 return elf_ptr(char, elf64toh(shdr->sh_offset)); 8c49b5d43d4c45 David Brazdil 2021-01-05 228 } 8c49b5d43d4c45 David Brazdil 2021-01-05 229 8c49b5d43d4c45 David Brazdil 2021-01-05 230 /* Find a section by its offset from the beginning of the file. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 231 static inline Elf64_Shdr *section_by_off(Elf64_Off off) 8c49b5d43d4c45 David Brazdil 2021-01-05 232 { 83de54b4bb92bc Tianjia Zhang 2024-10-09 233 assert_ne(off, 0ULL, "%llu"); 8c49b5d43d4c45 David Brazdil 2021-01-05 234 return elf_ptr(Elf64_Shdr, off); 8c49b5d43d4c45 David Brazdil 2021-01-05 235 } 8c49b5d43d4c45 David Brazdil 2021-01-05 236 8c49b5d43d4c45 David Brazdil 2021-01-05 237 /* Find a section by its index. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 238 static inline Elf64_Shdr *section_by_idx(uint16_t idx) 8c49b5d43d4c45 David Brazdil 2021-01-05 239 { 8c49b5d43d4c45 David Brazdil 2021-01-05 240 assert_ne(idx, SHN_UNDEF, "%u"); 8c49b5d43d4c45 David Brazdil 2021-01-05 241 return &elf.sh_table[idx]; 8c49b5d43d4c45 David Brazdil 2021-01-05 242 } 8c49b5d43d4c45 David Brazdil 2021-01-05 243 8c49b5d43d4c45 David Brazdil 2021-01-05 244 /* 8c49b5d43d4c45 David Brazdil 2021-01-05 245 * Memory-map the given ELF file, perform sanity checks, and 8c49b5d43d4c45 David Brazdil 2021-01-05 246 * populate global state. 8c49b5d43d4c45 David Brazdil 2021-01-05 247 */ 8c49b5d43d4c45 David Brazdil 2021-01-05 248 static void init_elf(const char *path) 8c49b5d43d4c45 David Brazdil 2021-01-05 249 { 8c49b5d43d4c45 David Brazdil 2021-01-05 250 int fd, ret; 8c49b5d43d4c45 David Brazdil 2021-01-05 251 struct stat stat; 8c49b5d43d4c45 David Brazdil 2021-01-05 252 8c49b5d43d4c45 David Brazdil 2021-01-05 253 /* Store path in the global struct for error printing. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 254 elf.path = path; 8c49b5d43d4c45 David Brazdil 2021-01-05 255 8c49b5d43d4c45 David Brazdil 2021-01-05 256 /* Open the ELF file. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 257 fd = open(path, O_RDONLY); 8c49b5d43d4c45 David Brazdil 2021-01-05 258 if (fd < 0) 8c49b5d43d4c45 David Brazdil 2021-01-05 259 fatal_perror("Could not open ELF file"); 8c49b5d43d4c45 David Brazdil 2021-01-05 260 8c49b5d43d4c45 David Brazdil 2021-01-05 261 /* Get status of ELF file to obtain its size. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 262 ret = fstat(fd, &stat); 8c49b5d43d4c45 David Brazdil 2021-01-05 263 if (ret < 0) { 8c49b5d43d4c45 David Brazdil 2021-01-05 264 close(fd); 8c49b5d43d4c45 David Brazdil 2021-01-05 265 fatal_perror("Could not get status of ELF file"); 8c49b5d43d4c45 David Brazdil 2021-01-05 266 } 8c49b5d43d4c45 David Brazdil 2021-01-05 267 8c49b5d43d4c45 David Brazdil 2021-01-05 268 /* mmap() the entire ELF file read-only at an arbitrary address. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 269 elf.begin = mmap(0, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0); 8c49b5d43d4c45 David Brazdil 2021-01-05 270 if (elf.begin == MAP_FAILED) { 8c49b5d43d4c45 David Brazdil 2021-01-05 271 close(fd); 8c49b5d43d4c45 David Brazdil 2021-01-05 272 fatal_perror("Could not mmap ELF file"); 8c49b5d43d4c45 David Brazdil 2021-01-05 273 } 8c49b5d43d4c45 David Brazdil 2021-01-05 274 8c49b5d43d4c45 David Brazdil 2021-01-05 275 /* mmap() was successful, close the FD. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 276 close(fd); 8c49b5d43d4c45 David Brazdil 2021-01-05 277 8c49b5d43d4c45 David Brazdil 2021-01-05 278 /* Get pointer to the ELF header. */ 83de54b4bb92bc Tianjia Zhang 2024-10-09 279 assert_ge(stat.st_size, (off_t)sizeof(*elf.ehdr), "%llu"); 8c49b5d43d4c45 David Brazdil 2021-01-05 280 elf.ehdr = elf_ptr(Elf64_Ehdr, 0); 8c49b5d43d4c45 David Brazdil 2021-01-05 281 8c49b5d43d4c45 David Brazdil 2021-01-05 282 /* Check the ELF magic. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 283 assert_eq(elf.ehdr->e_ident[EI_MAG0], ELFMAG0, "0x%x"); 8c49b5d43d4c45 David Brazdil 2021-01-05 284 assert_eq(elf.ehdr->e_ident[EI_MAG1], ELFMAG1, "0x%x"); 8c49b5d43d4c45 David Brazdil 2021-01-05 285 assert_eq(elf.ehdr->e_ident[EI_MAG2], ELFMAG2, "0x%x"); 8c49b5d43d4c45 David Brazdil 2021-01-05 286 assert_eq(elf.ehdr->e_ident[EI_MAG3], ELFMAG3, "0x%x"); 8c49b5d43d4c45 David Brazdil 2021-01-05 287 8c49b5d43d4c45 David Brazdil 2021-01-05 288 /* Sanity check that this is an ELF64 relocatable object for AArch64. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 289 assert_eq(elf.ehdr->e_ident[EI_CLASS], ELFCLASS64, "%u"); bc93763f178fd0 Marc Zyngier 2021-01-30 290 assert_eq(elf.ehdr->e_ident[EI_DATA], ELFENDIAN, "%u"); bc93763f178fd0 Marc Zyngier 2021-01-30 291 assert_eq(elf16toh(elf.ehdr->e_type), ET_REL, "%u"); bc93763f178fd0 Marc Zyngier 2021-01-30 292 assert_eq(elf16toh(elf.ehdr->e_machine), EM_AARCH64, "%u"); 8c49b5d43d4c45 David Brazdil 2021-01-05 293 8c49b5d43d4c45 David Brazdil 2021-01-05 294 /* Populate fields of the global struct. */ bc93763f178fd0 Marc Zyngier 2021-01-30 295 elf.sh_table = section_by_off(elf64toh(elf.ehdr->e_shoff)); bc93763f178fd0 Marc Zyngier 2021-01-30 296 elf.sh_string = section_begin(section_by_idx(elf16toh(elf.ehdr->e_shstrndx))); 8c49b5d43d4c45 David Brazdil 2021-01-05 297 } 8c49b5d43d4c45 David Brazdil 2021-01-05 298 8c49b5d43d4c45 David Brazdil 2021-01-05 299 /* Print the prologue of the output ASM file. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 300 static void emit_prologue(void) 8c49b5d43d4c45 David Brazdil 2021-01-05 301 { 8c49b5d43d4c45 David Brazdil 2021-01-05 302 printf(".data\n" 8c49b5d43d4c45 David Brazdil 2021-01-05 303 ".pushsection " HYP_RELOC_SECTION ", \"a\"\n"); 8c49b5d43d4c45 David Brazdil 2021-01-05 304 } 8c49b5d43d4c45 David Brazdil 2021-01-05 305 8c49b5d43d4c45 David Brazdil 2021-01-05 306 /* Print ASM statements needed as a prologue to a processed hyp section. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 307 static void emit_section_prologue(const char *sh_orig_name) 8c49b5d43d4c45 David Brazdil 2021-01-05 308 { 8c49b5d43d4c45 David Brazdil 2021-01-05 309 /* Declare the hyp section symbol. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 310 printf(".global %s%s\n", HYP_SECTION_SYMBOL_PREFIX, sh_orig_name); 8c49b5d43d4c45 David Brazdil 2021-01-05 311 } 8c49b5d43d4c45 David Brazdil 2021-01-05 312 8c49b5d43d4c45 David Brazdil 2021-01-05 313 /* 8c49b5d43d4c45 David Brazdil 2021-01-05 314 * Print ASM statements to create a hyp relocation entry for a given 8c49b5d43d4c45 David Brazdil 2021-01-05 315 * R_AARCH64_ABS64 relocation. 8c49b5d43d4c45 David Brazdil 2021-01-05 316 * 8c49b5d43d4c45 David Brazdil 2021-01-05 317 * The linker of vmlinux will populate the position given by `rela` with 8c49b5d43d4c45 David Brazdil 2021-01-05 318 * an absolute 64-bit kernel VA. If the kernel is relocatable, it will 8c49b5d43d4c45 David Brazdil 2021-01-05 319 * also generate a dynamic relocation entry so that the kernel can shift 8c49b5d43d4c45 David Brazdil 2021-01-05 320 * the address at runtime for KASLR. 8c49b5d43d4c45 David Brazdil 2021-01-05 321 * 8c49b5d43d4c45 David Brazdil 2021-01-05 322 * Emit a 32-bit offset from the current address to the position given 8c49b5d43d4c45 David Brazdil 2021-01-05 323 * by `rela`. This way the kernel can iterate over all kernel VAs used 8c49b5d43d4c45 David Brazdil 2021-01-05 324 * by hyp at runtime and convert them to hyp VAs. However, that offset 8c49b5d43d4c45 David Brazdil 2021-01-05 325 * will not be known until linking of `vmlinux`, so emit a PREL32 8c49b5d43d4c45 David Brazdil 2021-01-05 326 * relocation referencing a symbol that the hyp linker script put at 8c49b5d43d4c45 David Brazdil 2021-01-05 327 * the beginning of the relocated section + the offset from `rela`. 8c49b5d43d4c45 David Brazdil 2021-01-05 328 */ 8c49b5d43d4c45 David Brazdil 2021-01-05 329 static void emit_rela_abs64(Elf64_Rela *rela, const char *sh_orig_name) 8c49b5d43d4c45 David Brazdil 2021-01-05 330 { 8c49b5d43d4c45 David Brazdil 2021-01-05 331 /* Offset of this reloc from the beginning of HYP_RELOC_SECTION. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 332 static size_t reloc_offset; 8c49b5d43d4c45 David Brazdil 2021-01-05 333 8c49b5d43d4c45 David Brazdil 2021-01-05 334 /* Create storage for the 32-bit offset. */ 8c49b5d43d4c45 David Brazdil 2021-01-05 335 printf(".word 0\n"); 8c49b5d43d4c45 David Brazdil 2021-01-05 336 8c49b5d43d4c45 David Brazdil 2021-01-05 337 /* 8c49b5d43d4c45 David Brazdil 2021-01-05 338 * Create a PREL32 relocation which instructs the linker of `vmlinux` 8c49b5d43d4c45 David Brazdil 2021-01-05 339 * to insert offset to position <base> + <offset>, where <base> is 8c49b5d43d4c45 David Brazdil 2021-01-05 340 * a symbol at the beginning of the relocated section, and <offset> 8c49b5d43d4c45 David Brazdil 2021-01-05 341 * is `rela->r_offset`. 8c49b5d43d4c45 David Brazdil 2021-01-05 342 */ 83de54b4bb92bc Tianjia Zhang 2024-10-09 @343 printf(".reloc %lu, R_AARCH64_PREL32, %s%s + 0x%llx\n", 8c49b5d43d4c45 David Brazdil 2021-01-05 344 reloc_offset, HYP_SECTION_SYMBOL_PREFIX, sh_orig_name, bc93763f178fd0 Marc Zyngier 2021-01-30 345 elf64toh(rela->r_offset)); 8c49b5d43d4c45 David Brazdil 2021-01-05 346 8c49b5d43d4c45 David Brazdil 2021-01-05 347 reloc_offset += 4; 8c49b5d43d4c45 David Brazdil 2021-01-05 348 } 8c49b5d43d4c45 David Brazdil 2021-01-05 349 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-10-16 6:23 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-10-09 8:57 [PATCH] KVM: arm64: nVHE: gen-hyprel: Silent build warnings Tianjia Zhang 2024-10-09 11:07 ` Marc Zyngier 2024-10-10 8:12 ` tianjia.zhang 2024-10-10 13:03 ` Marc Zyngier 2024-10-14 6:31 ` tianjia.zhang 2024-10-10 15:23 ` Nick Desaulniers 2024-10-14 6:50 ` tianjia.zhang 2024-10-16 6:19 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).