From a0cc5a697ce13dece6833dca41913fe5c467d3d3 Mon Sep 17 00:00:00 2001 From: Furquan Shaikh Date: Wed, 30 May 2018 23:46:16 -0700 Subject: util/sconfig: Re-factor emitting of headers to static.c This change removes call to add_header from parsing functions and moves it to a local function within main.c. It also adds a new function emit_headers that is responsible for creating the linked list for chip headers and emitting those to static.c BUG=b:80081934 TEST=Verified that static.c for all files compiled using abuild is the same with and without this change. Change-Id: I24d526e81323115d3cc927242a4b9e49414afbe0 Signed-off-by: Furquan Shaikh Reviewed-on: https://review.coreboot.org/26726 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- util/sconfig/main.c | 110 ++++++++++++++++++++----------------- util/sconfig/sconfig.h | 1 - util/sconfig/sconfig.tab.c_shipped | 5 +- util/sconfig/sconfig.y | 1 - 4 files changed, 61 insertions(+), 56 deletions(-) diff --git a/util/sconfig/main.c b/util/sconfig/main.c index 382d5e5c7b..7cdde1c28e 100644 --- a/util/sconfig/main.c +++ b/util/sconfig/main.c @@ -22,8 +22,6 @@ extern int linenum; struct device *head, *lastdev; -struct header headers; - static struct chip *chip_head; /* @@ -244,30 +242,6 @@ struct chip *new_chip(char *path) return new_chip; } -void add_header(struct chip *chip) -{ - int include_exists = 0; - struct header *h = &headers; - while (h->next) { - int result = strcmp(chip->name, h->next->name); - if (result == 0) { - include_exists = 1; - break; - } - if (result < 0) - break; - h = h->next; - } - if (!include_exists) { - struct header *tmp = h->next; - h->next = malloc(sizeof(struct header)); - memset(h->next, 0, sizeof(struct header)); - h->next->chiph_exists = chip->chiph_exists; - h->next->name = chip->name; - h->next->next = tmp; - } -} - struct device *new_device(struct device *parent, struct device *busdev, struct chip *chip, const int bus, const char *devnum, int enabled) @@ -622,10 +596,69 @@ static void walk_device_tree(FILE *fil, struct device *ptr, } while (ptr); } +static void add_header(struct chip *chip, struct header *h) +{ + int include_exists = 0; + + while (h->next) { + int result = strcmp(chip->name, h->next->name); + if (result == 0) { + include_exists = 1; + break; + } + if (result < 0) + break; + h = h->next; + } + + if (!include_exists) { + struct header *tmp = h->next; + h->next = malloc(sizeof(struct header)); + memset(h->next, 0, sizeof(struct header)); + h->next->chiph_exists = chip->chiph_exists; + h->next->name = chip->name; + h->next->next = tmp; + } +} + +static void emit_headers(FILE *fil) +{ + struct header *h; + struct chip *chip; + struct header headers = {}; + + for (chip = chip_head; chip; chip = chip->next) + add_header(chip, &headers); + + fprintf(fil, "#include \n"); + fprintf(fil, "#include \n"); + h = &headers; + while (h->next) { + h = h->next; + if (h->chiph_exists) + fprintf(fil, "#include \"%s/chip.h\"\n", h->name); + } + fprintf(fil, "\n#if !DEVTREE_EARLY\n"); + fprintf(fil, + "__attribute__((weak)) struct chip_operations mainboard_ops = {};\n"); + h = &headers; + while (h->next) { + h = h->next; + char *name_underscore = translate_name(h->name, UNSLASH); + fprintf(fil, + "__attribute__((weak)) struct chip_operations %s_ops = {};\n", + name_underscore); + free(name_underscore); + } + fprintf(fil, "#endif\n"); +} + static void emit_chips(FILE *fil) { struct chip *chip; + emit_headers(fil); + for (chip = chip_head; chip; chip = chip->next) { if (!chip->chiph_exists) continue; @@ -693,8 +726,6 @@ int main(int argc, char **argv) char *devtree = argv[DEVICEFILE_ARG]; char *outputc = argv[OUTPUTFILE_ARG]; - headers.next = 0; - FILE *filec = fopen(devtree, "r"); if (!filec) { perror(NULL); @@ -717,29 +748,6 @@ int main(int argc, char **argv) exit(1); } - struct header *h; - fprintf(autogen, "#include \n"); - fprintf(autogen, "#include \n"); - h = &headers; - while (h->next) { - h = h->next; - if (h->chiph_exists) - fprintf(autogen, "#include \"%s/chip.h\"\n", h->name); - } - fprintf(autogen, "\n#if !DEVTREE_EARLY\n"); - fprintf(autogen, - "__attribute__((weak)) struct chip_operations mainboard_ops = {};\n"); - h = &headers; - while (h->next) { - h = h->next; - char *name_underscore = translate_name(h->name, UNSLASH); - fprintf(autogen, - "__attribute__((weak)) struct chip_operations %s_ops = {};\n", - name_underscore); - free(name_underscore); - } - fprintf(autogen, "#endif\n"); - emit_chips(autogen); walk_device_tree(autogen, &root, inherit_subsystem_ids, NULL); diff --git a/util/sconfig/sconfig.h b/util/sconfig/sconfig.h index 79d2da0d16..8e1d35c9b8 100644 --- a/util/sconfig/sconfig.h +++ b/util/sconfig/sconfig.h @@ -110,7 +110,6 @@ void fold_in(struct device *parent); void postprocess_devtree(void); struct chip *new_chip(char *path); -void add_header(struct chip *chip); struct device *new_device(struct device *parent, struct device *busdev, struct chip *chip, const int bus, const char *devnum, int enabled); diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped index 637927a8b2..f8d1943de8 100644 --- a/util/sconfig/sconfig.tab.c_shipped +++ b/util/sconfig/sconfig.tab.c_shipped @@ -487,8 +487,8 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint8 yyrline[] = { 0, 36, 36, 36, 38, 38, 38, 38, 40, 40, - 40, 40, 40, 40, 42, 42, 52, 52, 64, 67, - 70, 73, 76 + 40, 40, 40, 40, 42, 42, 51, 51, 63, 66, + 69, 72, 75 }; #endif @@ -1311,7 +1311,6 @@ yyreduce: { cur_chip = chip_dequeue_tail(); - add_header((yyvsp[-2].chip)); } break; diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y index 651aa87d50..671b43551e 100755 --- a/util/sconfig/sconfig.y +++ b/util/sconfig/sconfig.y @@ -46,7 +46,6 @@ chip: CHIP STRING /* == path */ { } chipchildren END { cur_chip = chip_dequeue_tail(); - add_header($3); }; device: DEVICE BUS NUMBER /* == devnum */ BOOL { -- cgit v1.2.3