* [ardb:for-kernelci 13/17] arch/arm64/kernel/pi/early_map_kernel.c:134:31: warning: Comparing pointers that point to different objects [comparePointers]
@ 2022-07-07 8:06 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-07-07 8:06 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 8132 bytes --]
::::::
:::::: Manual check reason: "low confidence static check warning: arch/arm64/kernel/pi/early_map_kernel.c:134:31: warning: Comparing pointers that point to different objects [comparePointers]"
::::::
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
tree: git://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git for-kernelci
head: 3ed2d2fa189b2f472547045b3af344e7806f7779
commit: 32a20e7c99cc0d6b5948880ea9cfc14068b22f7b [13/17] arm64: head: move early kernel mapping and relocation code to C code
:::::: branch date: 7 days ago
:::::: commit date: 7 days ago
compiler: aarch64-linux-gcc (GCC) 11.3.0
reproduce (cppcheck warning):
# apt-get install cppcheck
git checkout 32a20e7c99cc0d6b5948880ea9cfc14068b22f7b
cppcheck --quiet --enable=style,performance,portability --template=gcc FILE
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> arch/arm64/kernel/pi/early_map_kernel.c:134:31: warning: Comparing pointers that point to different objects [comparePointers]
for (rela = rela_start; rela < rela_end; rela++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:125:25: note: Variable declared here.
extern const Elf64_Rela rela_start[], rela_end[];
^
arch/arm64/kernel/pi/early_map_kernel.c:134:14: note: Array decayed to pointer here.
for (rela = rela_start; rela < rela_end; rela++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:125:39: note: Variable declared here.
extern const Elf64_Rela rela_start[], rela_end[];
^
arch/arm64/kernel/pi/early_map_kernel.c:134:33: note: Array decayed to pointer here.
for (rela = rela_start; rela < rela_end; rela++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:134:31: note: Comparing pointers that point to different objects
for (rela = rela_start; rela < rela_end; rela++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:169:31: warning: Comparing pointers that point to different objects [comparePointers]
for (relr = relr_start; relr < relr_end; relr++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:126:18: note: Variable declared here.
extern const u64 relr_start[], relr_end[];
^
arch/arm64/kernel/pi/early_map_kernel.c:169:14: note: Array decayed to pointer here.
for (relr = relr_start; relr < relr_end; relr++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:126:32: note: Variable declared here.
extern const u64 relr_start[], relr_end[];
^
arch/arm64/kernel/pi/early_map_kernel.c:169:33: note: Array decayed to pointer here.
for (relr = relr_start; relr < relr_end; relr++) {
^
arch/arm64/kernel/pi/early_map_kernel.c:169:31: note: Comparing pointers that point to different objects
for (relr = relr_start; relr < relr_end; relr++) {
^
vim +134 arch/arm64/kernel/pi/early_map_kernel.c
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 127
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 128 static void relocate_kernel(u64 offset)
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 129 {
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 130 const Elf64_Rela *rela;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 131 const u64 *relr;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 132 u64 *place;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 133
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 @134 for (rela = rela_start; rela < rela_end; rela++) {
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 135 if (ELF64_R_TYPE(rela->r_info) != R_AARCH64_RELATIVE)
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 136 continue;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 137 place = (u64 *)(rela->r_offset + offset);
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 138 *place = rela->r_addend + offset;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 139 }
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 140
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 141 if (!IS_ENABLED(CONFIG_RELR) || !offset)
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 142 return;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 143
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 144 /*
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 145 * Apply RELR relocations.
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 146 *
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 147 * RELR is a compressed format for storing relative relocations. The
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 148 * encoded sequence of entries looks like:
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 149 * [ AAAAAAAA BBBBBBB1 BBBBBBB1 ... AAAAAAAA BBBBBB1 ... ]
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 150 *
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 151 * i.e. start with an address, followed by any number of bitmaps. The
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 152 * address entry encodes 1 relocation. The subsequent bitmap entries
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 153 * encode up to 63 relocations each, at subsequent offsets following
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 154 * the last address entry.
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 155 *
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 156 * The bitmap entries must have 1 in the least significant bit. The
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 157 * assumption here is that an address cannot have 1 in lsb. Odd
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 158 * addresses are not supported. Any odd addresses are stored in the
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 159 * RELA section, which is handled above.
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 160 *
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 161 * Excluding the least significant bit in the bitmap, each non-zero bit
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 162 * in the bitmap represents a relocation to be applied to a
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 163 * corresponding machine word that follows the base address word. The
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 164 * second least significant bit represents the machine word immediately
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 165 * following the initial address, and each bit that follows represents
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 166 * the next word, in linear order. As such, a single bitmap can encode
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 167 * up to 63 relocations in a 64-bit object.
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 168 */
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 169 for (relr = relr_start; relr < relr_end; relr++) {
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 170 u64 *p, r = *relr;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 171
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 172 if ((r & 1) == 0) {
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 173 place = (u64 *)(r + offset);
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 174 *place++ += offset;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 175 } else {
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 176 for (p = place; r; p++) {
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 177 r >>= 1;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 178 if (r & 1)
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 179 *p += offset;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 180 }
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 181 place += 63;
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 182 }
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 183 }
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 184 }
32a20e7c99cc0d6 Ard Biesheuvel 2022-06-29 185
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-07-07 8:06 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-07 8:06 [ardb:for-kernelci 13/17] arch/arm64/kernel/pi/early_map_kernel.c:134:31: warning: Comparing pointers that point to different objects [comparePointers] kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.