Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Copyright (C) 2017 Josh Poimboeuf <jpoimboe@redhat.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  * objtool orc:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9)  * This command analyzes a .o file and adds .orc_unwind and .orc_unwind_ip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  * sections to it, which is used by the in-kernel ORC unwinder.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)  * This command is a superset of "objtool check".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <string.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "builtin.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include "objtool.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) static const char *orc_usage[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	"objtool orc generate [<options>] file.o",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	"objtool orc dump file.o",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) int cmd_orc(int argc, const char **argv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	const char *objname;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	argc--; argv++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	if (argc <= 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 		usage_with_options(orc_usage, check_options);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	if (!strncmp(argv[0], "gen", 3)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 		struct objtool_file *file;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 		argc = parse_options(argc, argv, check_options, orc_usage, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 		if (argc != 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 			usage_with_options(orc_usage, check_options);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 		objname = argv[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 		file = objtool_open_read(objname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 		if (!file)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 			return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 		ret = check(file);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 		if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 			return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 		if (list_empty(&file->insn_list))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 			return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 		ret = create_orc(file);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 		if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 			return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 		ret = create_orc_sections(file);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 		if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 			return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 		if (!file->elf->changed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 			return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 		return elf_write(file->elf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	if (!strcmp(argv[0], "dump")) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 		if (argc != 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 			usage_with_options(orc_usage, check_options);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 		objname = argv[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 		return orc_dump(objname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 	usage_with_options(orc_usage, check_options);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) }