All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.