Skip to content

Commit

Permalink
kallsyms: take the input file instead of reading stdin
Browse files Browse the repository at this point in the history
This gets rid of the pipe operator connected with 'cat'.

Also use getopt_long() to parse the command line.

Signed-off-by: Masahiro Yamada <[email protected]>
  • Loading branch information
masahir0y committed Oct 2, 2022
1 parent a2833d1 commit aa221f2
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 19 deletions.
51 changes: 33 additions & 18 deletions scripts/kallsyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*
*/

#include <getopt.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down Expand Up @@ -71,7 +72,7 @@ static unsigned char best_table_len[256];
static void usage(void)
{
fprintf(stderr, "Usage: kallsyms [--all-symbols] [--absolute-percpu] "
"[--base-relative] < in.map > out.S\n");
"[--base-relative] in.map > out.S\n");
exit(1);
}

Expand Down Expand Up @@ -310,12 +311,19 @@ static void shrink_table(void)
}
}

static void read_map(FILE *in)
static void read_map(const char *in)
{
FILE *fp;
struct sym_entry *sym;

while (!feof(in)) {
sym = read_symbol(in);
fp = fopen(in, "r");
if (!fp) {
perror(in);
exit(1);
}

while (!feof(fp)) {
sym = read_symbol(fp);
if (!sym)
continue;

Expand All @@ -326,12 +334,15 @@ static void read_map(FILE *in)
table = realloc(table, sizeof(*table) * table_size);
if (!table) {
fprintf(stderr, "out of memory\n");
fclose(fp);
exit (1);
}
}

table[table_cnt++] = sym;
}

fclose(fp);
}

static void output_label(const char *label)
Expand Down Expand Up @@ -762,22 +773,26 @@ static void record_relative_base(void)

int main(int argc, char **argv)
{
if (argc >= 2) {
int i;
for (i = 1; i < argc; i++) {
if(strcmp(argv[i], "--all-symbols") == 0)
all_symbols = 1;
else if (strcmp(argv[i], "--absolute-percpu") == 0)
absolute_percpu = 1;
else if (strcmp(argv[i], "--base-relative") == 0)
base_relative = 1;
else
usage();
}
} else if (argc != 1)
while (1) {
static struct option long_options[] = {
{"all-symbols", no_argument, &all_symbols, 1},
{"absolute-percpu", no_argument, &absolute_percpu, 1},
{"base-relative", no_argument, &base_relative, 1},
{},
};

int c = getopt_long(argc, argv, "", long_options, NULL);

if (c == -1)
break;
if (c != 0)
usage();
}

if (optind >= argc)
usage();

read_map(stdin);
read_map(argv[optind]);
shrink_table();
if (absolute_percpu)
make_percpus_absolute();
Expand Down
2 changes: 1 addition & 1 deletion scripts/link-vmlinux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ kallsyms()
fi

info KSYMS ${2}
cat ${1} | scripts/kallsyms ${kallsymopt} > ${2}
scripts/kallsyms ${kallsymopt} ${1} > ${2}
}

# Perform one step in kallsyms generation, including temporary linking of
Expand Down

0 comments on commit aa221f2

Please sign in to comment.