File: machine.c

package info (click to toggle)
linux 5.10.13-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,182,916 kB
  • sloc: ansic: 19,488,074; asm: 263,676; sh: 73,873; makefile: 44,685; perl: 34,640; python: 32,386; cpp: 6,070; yacc: 4,755; lex: 2,742; awk: 1,214; ruby: 25; sed: 5
file content (27 lines) | stat: -rw-r--r-- 925 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// SPDX-License-Identifier: GPL-2.0

#include <stdio.h>
#include <string.h>
#include "debug.h"
#include "symbol.h"

/* On arm64, kernel text segment start at high memory address,
 * for example 0xffff 0000 8xxx xxxx. Modules start at a low memory
 * address, like 0xffff 0000 00ax xxxx. When only samll amount of
 * memory is used by modules, gap between end of module's text segment
 * and start of kernel text segment may be reach 2G.
 * Therefore do not fill this gap and do not assign it to the kernel dso map.
 */

#define SYMBOL_LIMIT (1 << 12) /* 4K */

void arch__symbols__fixup_end(struct symbol *p, struct symbol *c)
{
	if ((strchr(p->name, '[') && strchr(c->name, '[') == NULL) ||
			(strchr(p->name, '[') == NULL && strchr(c->name, '[')))
		/* Limit range of last symbol in module and kernel */
		p->end += SYMBOL_LIMIT;
	else
		p->end = c->start;
	pr_debug4("%s sym:%s end:%#lx\n", __func__, p->name, p->end);
}