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
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) #include <elf.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #include <inttypes.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) #include <stdio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #include "dso.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #include "map.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #include "symbol.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) size_t symbol__fprintf(struct symbol *sym, FILE *fp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 	return fprintf(fp, " %" PRIx64 "-%" PRIx64 " %c %s\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 		       sym->start, sym->end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 		       sym->binding == STB_GLOBAL ? 'g' :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 		       sym->binding == STB_LOCAL  ? 'l' : 'w',
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 		       sym->name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) size_t __symbol__fprintf_symname_offs(const struct symbol *sym,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 				      const struct addr_location *al,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 				      bool unknown_as_addr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 				      bool print_offsets, FILE *fp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	unsigned long offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	size_t length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	if (sym) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 		length = fprintf(fp, "%s", sym->name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 		if (al && print_offsets) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 			if (al->addr < sym->end)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 				offset = al->addr - sym->start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 			else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 				offset = al->addr - al->map->start - sym->start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 			length += fprintf(fp, "+0x%lx", offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 		return length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	} else if (al && unknown_as_addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 		return fprintf(fp, "[%#" PRIx64 "]", al->addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 		return fprintf(fp, "[unknown]");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) size_t symbol__fprintf_symname_offs(const struct symbol *sym,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 				    const struct addr_location *al,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 				    FILE *fp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	return __symbol__fprintf_symname_offs(sym, al, false, true, fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) size_t __symbol__fprintf_symname(const struct symbol *sym,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 				 const struct addr_location *al,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 				 bool unknown_as_addr, FILE *fp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	return __symbol__fprintf_symname_offs(sym, al, unknown_as_addr, false, fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	return __symbol__fprintf_symname_offs(sym, NULL, false, false, fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) size_t dso__fprintf_symbols_by_name(struct dso *dso,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 				    FILE *fp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	size_t ret = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	struct rb_node *nd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	struct symbol_name_rb_node *pos;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	for (nd = rb_first_cached(&dso->symbol_names); nd; nd = rb_next(nd)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 		pos = rb_entry(nd, struct symbol_name_rb_node, rb_node);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 		ret += fprintf(fp, "%s\n", pos->sym.name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) }