linux/scripts/genksyms/genksyms.c
<<
>>
Prefs
   1/* Generate kernel symbol version hashes.
   2   Copyright 1996, 1997 Linux International.
   3
   4   New implementation contributed by Richard Henderson <rth@tamu.edu>
   5   Based on original work by Bjorn Ekwall <bj0rn@blox.se>
   6
   7   This file was part of the Linux modutils 2.4.22: moved back into the
   8   kernel sources by Rusty Russell/Kai Germaschewski.
   9
  10   This program is free software; you can redistribute it and/or modify it
  11   under the terms of the GNU General Public License as published by the
  12   Free Software Foundation; either version 2 of the License, or (at your
  13   option) any later version.
  14
  15   This program is distributed in the hope that it will be useful, but
  16   WITHOUT ANY WARRANTY; without even the implied warranty of
  17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18   General Public License for more details.
  19
  20   You should have received a copy of the GNU General Public License
  21   along with this program; if not, write to the Free Software Foundation,
  22   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  23
  24#include <stdio.h>
  25#include <string.h>
  26#include <stdlib.h>
  27#include <unistd.h>
  28#include <assert.h>
  29#include <stdarg.h>
  30#ifdef __GNU_LIBRARY__
  31#include <getopt.h>
  32#endif                          /* __GNU_LIBRARY__ */
  33
  34#include "genksyms.h"
  35/*----------------------------------------------------------------------*/
  36
  37#define HASH_BUCKETS  4096
  38
  39static struct symbol *symtab[HASH_BUCKETS];
  40static FILE *debugfile;
  41
  42int cur_line = 1;
  43char *cur_filename, *source_file;
  44int in_source_file;
  45
  46static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
  47           flag_preserve, flag_warnings;
  48static const char *arch = "";
  49static const char *mod_prefix = "";
  50
  51static int errors;
  52static int nsyms;
  53
  54static struct symbol *expansion_trail;
  55static struct symbol *visited_symbols;
  56
  57static const struct {
  58        int n;
  59        const char *name;
  60} symbol_types[] = {
  61        [SYM_NORMAL]     = { 0, NULL},
  62        [SYM_TYPEDEF]    = {'t', "typedef"},
  63        [SYM_ENUM]       = {'e', "enum"},
  64        [SYM_STRUCT]     = {'s', "struct"},
  65        [SYM_UNION]      = {'u', "union"},
  66        [SYM_ENUM_CONST] = {'E', "enum constant"},
  67};
  68
  69static int equal_list(struct string_list *a, struct string_list *b);
  70static void print_list(FILE * f, struct string_list *list);
  71static struct string_list *concat_list(struct string_list *start, ...);
  72static struct string_list *mk_node(const char *string);
  73static void print_location(void);
  74static void print_type_name(enum symbol_type type, const char *name);
  75
  76/*----------------------------------------------------------------------*/
  77
  78static const unsigned int crctab32[] = {
  79        0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U,
  80        0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U,
  81        0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U,
  82        0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU,
  83        0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U,
  84        0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,
  85        0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U,
  86        0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU,
  87        0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U,
  88        0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU,
  89        0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U,
  90        0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,
  91        0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U,
  92        0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU,
  93        0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU,
  94        0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U,
  95        0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU,
  96        0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,
  97        0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U,
  98        0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U,
  99        0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU,
 100        0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U,
 101        0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U,
 102        0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,
 103        0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U,
 104        0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U,
 105        0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U,
 106        0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U,
 107        0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U,
 108        0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,
 109        0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU,
 110        0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U,
 111        0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U,
 112        0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU,
 113        0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU,
 114        0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,
 115        0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU,
 116        0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U,
 117        0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU,
 118        0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U,
 119        0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU,
 120        0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,
 121        0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U,
 122        0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU,
 123        0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U,
 124        0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U,
 125        0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U,
 126        0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,
 127        0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U,
 128        0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U,
 129        0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU,
 130        0x2d02ef8dU
 131};
 132
 133static unsigned long partial_crc32_one(unsigned char c, unsigned long crc)
 134{
 135        return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8);
 136}
 137
 138static unsigned long partial_crc32(const char *s, unsigned long crc)
 139{
 140        while (*s)
 141                crc = partial_crc32_one(*s++, crc);
 142        return crc;
 143}
 144
 145static unsigned long crc32(const char *s)
 146{
 147        return partial_crc32(s, 0xffffffff) ^ 0xffffffff;
 148}
 149
 150/*----------------------------------------------------------------------*/
 151
 152static enum symbol_type map_to_ns(enum symbol_type t)
 153{
 154        switch (t) {
 155        case SYM_ENUM_CONST:
 156        case SYM_NORMAL:
 157        case SYM_TYPEDEF:
 158                return SYM_NORMAL;
 159        case SYM_ENUM:
 160        case SYM_STRUCT:
 161        case SYM_UNION:
 162                return SYM_STRUCT;
 163        }
 164        return t;
 165}
 166
 167struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact)
 168{
 169        unsigned long h = crc32(name) % HASH_BUCKETS;
 170        struct symbol *sym;
 171
 172        for (sym = symtab[h]; sym; sym = sym->hash_next)
 173                if (map_to_ns(sym->type) == map_to_ns(ns) &&
 174                    strcmp(name, sym->name) == 0 &&
 175                    sym->is_declared)
 176                        break;
 177
 178        if (exact && sym && sym->type != ns)
 179                return NULL;
 180        return sym;
 181}
 182
 183static int is_unknown_symbol(struct symbol *sym)
 184{
 185        struct string_list *defn;
 186
 187        return ((sym->type == SYM_STRUCT ||
 188                 sym->type == SYM_UNION ||
 189                 sym->type == SYM_ENUM) &&
 190                (defn = sym->defn)  && defn->tag == SYM_NORMAL &&
 191                        strcmp(defn->string, "}") == 0 &&
 192                (defn = defn->next) && defn->tag == SYM_NORMAL &&
 193                        strcmp(defn->string, "UNKNOWN") == 0 &&
 194                (defn = defn->next) && defn->tag == SYM_NORMAL &&
 195                        strcmp(defn->string, "{") == 0);
 196}
 197
 198static struct symbol *__add_symbol(const char *name, enum symbol_type type,
 199                            struct string_list *defn, int is_extern,
 200                            int is_reference)
 201{
 202        unsigned long h;
 203        struct symbol *sym;
 204        enum symbol_status status = STATUS_UNCHANGED;
 205        /* The parser adds symbols in the order their declaration completes,
 206         * so it is safe to store the value of the previous enum constant in
 207         * a static variable.
 208         */
 209        static int enum_counter;
 210        static struct string_list *last_enum_expr;
 211
 212        if (type == SYM_ENUM_CONST) {
 213                if (defn) {
 214                        free_list(last_enum_expr, NULL);
 215                        last_enum_expr = copy_list_range(defn, NULL);
 216                        enum_counter = 1;
 217                } else {
 218                        struct string_list *expr;
 219                        char buf[20];
 220
 221                        snprintf(buf, sizeof(buf), "%d", enum_counter++);
 222                        if (last_enum_expr) {
 223                                expr = copy_list_range(last_enum_expr, NULL);
 224                                defn = concat_list(mk_node("("),
 225                                                   expr,
 226                                                   mk_node(")"),
 227                                                   mk_node("+"),
 228                                                   mk_node(buf), NULL);
 229                        } else {
 230                                defn = mk_node(buf);
 231                        }
 232                }
 233        } else if (type == SYM_ENUM) {
 234                free_list(last_enum_expr, NULL);
 235                last_enum_expr = NULL;
 236                enum_counter = 0;
 237                if (!name)
 238                        /* Anonymous enum definition, nothing more to do */
 239                        return NULL;
 240        }
 241
 242        h = crc32(name) % HASH_BUCKETS;
 243        for (sym = symtab[h]; sym; sym = sym->hash_next) {
 244                if (map_to_ns(sym->type) == map_to_ns(type) &&
 245                    strcmp(name, sym->name) == 0) {
 246                        if (is_reference)
 247                                /* fall through */ ;
 248                        else if (sym->type == type &&
 249                                 equal_list(sym->defn, defn)) {
 250                                if (!sym->is_declared && sym->is_override) {
 251                                        print_location();
 252                                        print_type_name(type, name);
 253                                        fprintf(stderr, " modversion is "
 254                                                "unchanged\n");
 255                                }
 256                                sym->is_declared = 1;
 257                                return sym;
 258                        } else if (!sym->is_declared) {
 259                                if (sym->is_override && flag_preserve) {
 260                                        print_location();
 261                                        fprintf(stderr, "ignoring ");
 262                                        print_type_name(type, name);
 263                                        fprintf(stderr, " modversion change\n");
 264                                        sym->is_declared = 1;
 265                                        return sym;
 266                                } else {
 267                                        status = is_unknown_symbol(sym) ?
 268                                                STATUS_DEFINED : STATUS_MODIFIED;
 269                                }
 270                        } else {
 271                                error_with_pos("redefinition of %s", name);
 272                                return sym;
 273                        }
 274                        break;
 275                }
 276        }
 277
 278        if (sym) {
 279                struct symbol **psym;
 280
 281                for (psym = &symtab[h]; *psym; psym = &(*psym)->hash_next) {
 282                        if (*psym == sym) {
 283                                *psym = sym->hash_next;
 284                                break;
 285                        }
 286                }
 287                --nsyms;
 288        }
 289
 290        sym = xmalloc(sizeof(*sym));
 291        sym->name = name;
 292        sym->type = type;
 293        sym->defn = defn;
 294        sym->expansion_trail = NULL;
 295        sym->visited = NULL;
 296        sym->is_extern = is_extern;
 297
 298        sym->hash_next = symtab[h];
 299        symtab[h] = sym;
 300
 301        sym->is_declared = !is_reference;
 302        sym->status = status;
 303        sym->is_override = 0;
 304
 305        if (flag_debug) {
 306                if (symbol_types[type].name)
 307                        fprintf(debugfile, "Defn for %s %s == <",
 308                                symbol_types[type].name, name);
 309                else
 310                        fprintf(debugfile, "Defn for type%d %s == <",
 311                                type, name);
 312                if (is_extern)
 313                        fputs("extern ", debugfile);
 314                print_list(debugfile, defn);
 315                fputs(">\n", debugfile);
 316        }
 317
 318        ++nsyms;
 319        return sym;
 320}
 321
 322struct symbol *add_symbol(const char *name, enum symbol_type type,
 323                          struct string_list *defn, int is_extern)
 324{
 325        return __add_symbol(name, type, defn, is_extern, 0);
 326}
 327
 328static struct symbol *add_reference_symbol(const char *name, enum symbol_type type,
 329                                    struct string_list *defn, int is_extern)
 330{
 331        return __add_symbol(name, type, defn, is_extern, 1);
 332}
 333
 334/*----------------------------------------------------------------------*/
 335
 336void free_node(struct string_list *node)
 337{
 338        free(node->string);
 339        free(node);
 340}
 341
 342void free_list(struct string_list *s, struct string_list *e)
 343{
 344        while (s != e) {
 345                struct string_list *next = s->next;
 346                free_node(s);
 347                s = next;
 348        }
 349}
 350
 351static struct string_list *mk_node(const char *string)
 352{
 353        struct string_list *newnode;
 354
 355        newnode = xmalloc(sizeof(*newnode));
 356        newnode->string = xstrdup(string);
 357        newnode->tag = SYM_NORMAL;
 358        newnode->next = NULL;
 359
 360        return newnode;
 361}
 362
 363static struct string_list *concat_list(struct string_list *start, ...)
 364{
 365        va_list ap;
 366        struct string_list *n, *n2;
 367
 368        if (!start)
 369                return NULL;
 370        for (va_start(ap, start); (n = va_arg(ap, struct string_list *));) {
 371                for (n2 = n; n2->next; n2 = n2->next)
 372                        ;
 373                n2->next = start;
 374                start = n;
 375        }
 376        va_end(ap);
 377        return start;
 378}
 379
 380struct string_list *copy_node(struct string_list *node)
 381{
 382        struct string_list *newnode;
 383
 384        newnode = xmalloc(sizeof(*newnode));
 385        newnode->string = xstrdup(node->string);
 386        newnode->tag = node->tag;
 387
 388        return newnode;
 389}
 390
 391struct string_list *copy_list_range(struct string_list *start,
 392                                    struct string_list *end)
 393{
 394        struct string_list *res, *n;
 395
 396        if (start == end)
 397                return NULL;
 398        n = res = copy_node(start);
 399        for (start = start->next; start != end; start = start->next) {
 400                n->next = copy_node(start);
 401                n = n->next;
 402        }
 403        n->next = NULL;
 404        return res;
 405}
 406
 407static int equal_list(struct string_list *a, struct string_list *b)
 408{
 409        while (a && b) {
 410                if (a->tag != b->tag || strcmp(a->string, b->string))
 411                        return 0;
 412                a = a->next;
 413                b = b->next;
 414        }
 415
 416        return !a && !b;
 417}
 418
 419#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
 420
 421static struct string_list *read_node(FILE *f)
 422{
 423        char buffer[256];
 424        struct string_list node = {
 425                .string = buffer,
 426                .tag = SYM_NORMAL };
 427        int c;
 428
 429        while ((c = fgetc(f)) != EOF) {
 430                if (c == 'href="+code=i6< 713{
 430           ass="sref">c;
arr) (sizeof(genkhref="+code=b" class="sref">b<8
c == EOF 427        int  3324
 284  4" class="4ine" name="L333"> 333 430           \n    if (c ==  430           ass="sref">c;
arr) (sizeof(genkhref="+code=b" class="e=buffer"ine" name="L335"> 335 397                return node4
c =  397                return  3374
 284  4" class="lclass="sref">string)4
node)4
 430           ass="sref">c;
a + ZE" class="sref">ARRAYear - 1ref="+code=c" class="sref">c ==  3404
 310             stdesizeof( 315             Token too longa href="+code=ff"> 397                return  341 == defn, e4
 3434
 430           ass="sref">c;
 427        int e) 4
next4
 430           ass="sref">c;
arr) (sizeof(genkhref="+code=b" class=href="+co4e=s" class="sref">s)4
 397                return next4
 430           ass="sref">c;
sym-> 348        4
 430           ass="sref">c;
af">sym-> 3494
 350 430           ass="sref">c;
 430           #    if (c == string4
        struc13" class="line"f">af">sym-> 3524
newnode4
a"srefgenksyms.c#L401" id="L401" class="linef">denksyms/genksyms.c#L419" id="L419" class="line" name="L419"> 419#des"line" name="L308"> 308               )fgenksyms.c#L401" id="L401" class="lin++ref="+code=c" class="sref">c ==  354 430           ass="sref">c;
                  ine" name="L308"> 308                                id="L401" class="lins" class="sref">syid="L401" class="linref="+code=c" class="sref">c == newnode))4
 430        13" class="line"f">af">sym->string)4
 430           ass="sref">c;
sym->SYM_NORMAL4
n->defn, NULL4
 359newnode4
 310             stdesizeof( 315             Unknown=debu classca href="+code=fputs" class="sref="L313" class="line"" name="L430"> 430           ass="sref">c;
defn,  3614
defn,  362start, ...4
n->defn,  3644
ap4
n24
string_list *read_node(FILE * 367start4
 416     feo">read_node(c = NULL4
 329                                    struct n->next = string_list *));) 4
copy_list_range(struct id="L319" class="line" ist" class="sref">rin href="+code=strin"+code=next" class="sref">next = next4
string_list *sym-> 372 328stsubt id="L319" class="ubt i"+code=next" class="sref">next = start4
n4
string_lis"sref">c =  397                return  375        4
 409   "L3d="L319" class="line" ame="L386"> 386         426                .ap)4
b-> 386 ="sref">strcmp( 315             =sym" clhref="+code=ff="ripts/genksyms/genksyms.c#L408" id="L408"" class="4" class="sref">start4
 3784
string_lis"id="L346" class="line" name="L346"> 346          L3d="L319" class="line" f"> 397                return  379string_lis"sref">c =  397                return node4
 3814
 372newnode4
 427        int  383rin href="+code=strin"+coass="line" name="L39string_lis"sref">c =  397                return newnode))4
 409   rin href="+code=strin"+coame="L386"> 386         426                .string)4
b-> 386 ="sref">strcmp( 315             defn" href="+code=ff="ripts/genksyms/genksyms.c#L408" id="L408"f="+code=4ag" class="sref">tag4
 397                return  387 346         rin href="+code=strin"+cof"> 397                return newnode4
string_lisrin href="+code=strin"+coass="line" name="L39string_lis"sref">c =  397                return  3894
 390start4
 386 3"> 403         397                return  372end4
next =  3934
string_lisrin href="+code=strin"+coass="line" name="L39string_lis"sref">c =  397                return n4
 395 328stsubt id="L319" class="ubt i"+coe" name="L412"> 412tic struct symbol *name="L412"> 41de->strL3d="L319" class="line" ame="L386"> 386 ="sref">strcmp( 386        string = end4
type,  397                return NULL4
 328stsubt id="L319" class="ubt i"+coame="L386"> 386 sre         386 sre        start)4
string_lis"id="L346" class="line" name="L346"> 346          L3d="L319" class="line" f"> 397                return next) 5
start)5
next5
 402        5
"L346" class="line" 310">"L346ss="sref">string_list *c = string_list *a, strucst *NULL5
res5
 308                               st * 386        syid="L401" class="linref="+code=c" class="sref">c ==  4055
 328stpua>        while (pua>6"> 346          L3ine" name="L308"> 308                               st * 386        syid="L401" class="linde=a" class="sref"sref">c =  397                return  406        while (pua>6"> 34L430"> 430           #    if (c =  397                return NULL5
 4085
 308 346         st * 386 ="sref">strcmp(c =  397                return b) 5
string)5
"st *"ststring_list *c = string_list *a, strucst *next5
next5
 424<*ef">a, struc6" class="line" e hreng*ef">a, struc   return !a && !<5line" nam5="L414"> 414        5
 424<*L386"> 386  ">b->a, structmpid="L373" class=tmpif="+code=a" class="sref">a && !<5lclass="l5ine" name="L415"> 415 397                return b5
 4175
a, strucst * 426ref">n->c ==  418string_lis"puae="L308"> 308 34315"> 315             (nil)href="+code=fputs" class="sref"sref">c =  397                return arr)[0])5
 397                return  420f5
 4225
b-> 386 st * 397                return buffer[256]5
b-> 386  ">b->start = n->node = 5
 397                return buffer5
SYM_NORMAL }5
a, struc   return ! 412ewno id="L416" class=ewno ss="sref">string_lisLle3d="L319" class=Lle3clas"* lass="sref">newnode6" class="line" e hre"sref">xmalloc(sizeof(*c5
 413                 +gyms/genksyms.c#Lle3d="L319" class=Lle3clasref">xmalloc(sizeof(* 428 416" class="line" e hree-r1L> 397                return EOF) 5
'href="+code=i6<5713{
newnodetmpid="L373" class=tmpif="+--)"srL386"> 386 st * 397                return b<5
c<5a> ==  * 386 st *start = n-> 3325
id="L373" class=tmpif="+--)"srL386"> 386 st * 397                return  333c ==  335"L346" class="line" 310">"L346ss="sref">string_lis"sref">c = a, struc   return !xmalloc(sizeof(*node5
        while (pua>6"> 34L430"> 430                if (c =  397                return  3375
string)5
node)5
 3405
 3enksyms/genksyms.c#L328" id="L328" class="line" name="L328"> 328sts id="L319" class="line" isunsigned longgenksyms.c#L412"crcd="L319" class=crc"+cor> 397                return  341e5
string_list *a, strucst * 386 t  397                return  3435
 424<*ef">a, struc6" class="line" e hreng*ef">a, struc   return !a && !<5ref="+cod5=e" class="sref">e) 5
 424<*L386"> 386  ">b->a, structmpid="L373" class=tmpif="+code=a" class="sref">a && !<5"+code=ne5t" class="sref">next5
 397                return s)5
next5
 348        5
 397                return  3495
 350b-> 386 st * 397                return string5
 == b-> 386  ">b->start = n-> 3525
 397                return newnode5
 354a, struc   return ! 412ewno id="L416" class=ewno ss="sref">string_lisLle3d="L319" class=Lle3clas"* lass="sref">newnode6" class="line" e hre"sref">xmalloc(sizeof(*newnode))5
 413                 +gyms/genksyms.c#Lle3d="L319" class=Lle3clasref">xmalloc(sizeof(*string)5
a, structmpid="L373" class=tmpif="+e" name="L413"> 416" class="line" e hree-r1L> 397                return SYM_NORMAL5
NULL5
id="L373" class=tmpif="+--)"srL386"> 386 st * 397                return  359 * 386 st *start = n->newnode5
id="L373" class=tmpif="+--)"srL386"> 386 st * 397                return  3615
 362c == start, ...5
 424<*L386"> 386 cuizeof( 397                return  3645
 328stsubt id="L319" class="ubt i"+code=next" class="sref">next = ap5
n25
xmalloc(sizeof(* 367 386        c == start5
c == NULL5
a, strucflag_dump_defe="L308"> 308 397                return string_list *));) 5
 310             debugfsym href="+code=stribugfsym hreng4315"> 315             classs href="+code=fputs" class="sref"uizeof( 386 ="sref">strcmp(xmalloc(sizeof(*next5
 386 partial_crc3id="L373" class=partial_crc3i310             "uizeof( 386 ="sref">strcmp(xmalloc(sizeof(* 386 partial_crc3i_on6" class="line" 3artial_crc3i_on66"> 34L430"> 430                if (xmalloc(sizeof(*start5
 284  5 href="+c5de=n" class="sref">n5
 375        5
c == ap)5
fgetc(    TYPEDEs" cl:="+code=c" class="sref">c == start5
 41finda href="+code=symbol" finda href=310             "uizeof( 386 ="sref">strcmp( 386        xmalloc(sizeof(* 3785
 430/* FIXME: Bad r="sref"> fsymsgcan segfault hsre. */f (xmalloc(sizeof(* 379 386 Lxc == node5
 308 397                return  3815
 310             debugfsym href="+code=stribugfsym hreng4315"> 315             classs href="+code=fputs" class="sref"uizeof( 386 ="sref">strcmp(xmalloc(sizeof(*newnode5
 386 partial_crc3id="L373" class=partial_crc3i310             "uizeof( 386 ="sref">strcmp(xmalloc(sizeof(* 383 386 partial_crc3i_on6" class="line" 3artial_crc3i_on66"> 34L430"> 430                if (xmalloc(sizeof(*newnode))5
c == string)5
 386 Lx 416xxmalloc(sizeof(*tag5
 41subt id="L319" class="ubt i"+code=next" class="sref">next =  387 386 Lx 3name="L413"> 41subt id="L319" class="ubt i"+code=a" class="sref"rcd="L319" class=crc"+corref">xmalloc(sizeof(*newnode5
 3895
 284  5" class="5ine" name="L390"> 390start5
c ==  372end5
c == start4
5
 308c =  397       4beme="L333"> 333 424<*L386"> 386  ">pts/genksyms/gn/ge3 386  ">pts/genks7exeturn"sref">c = ipts/genksyms/genksyms.c#L347"pua> c4T>                returnbmt * 426ref">n-> 386< class="5ine" name="L362"> 362c == e59of(*stULL4
5a h49f="scripts/genksyms5g328"5 328stsubt id="L31class="sref">c == xmalloturn s6ass="> 396                retu6n c ==  386        sy"sr1L> 32 class="line" name="L424"> 424<*L386"> 386  ">pts/genksym5ne" name="L405">   rd="L401" class="  rksymsa href="+code=5 ref="+co5class="sref">s6a1s="> 396c ==  3815
 397      6     60 == e4onca=b" class="sref">b =  397s6) 5
<6 h5ef="scripts/genksyms/6enksy60e=stribugfsym hreng4315"> 315                    ="+cclass="same="L386"> 386        sy"sr1L> 32 class="line" name="L424"> 424<*L386"> 386  ">pts/genksym5ne" name="L405">   rd="L401" class="  rksym)sa href="+code=5 ref="+co5class="sref">s6a4a>) 5
<6 T      .         =no5e" class="srsyms.c#L4093 397       4beme="L333"> 333s6a5a>) 5
<6 NION      .cxmalloturn {f4e=string"4clsa href="+code=5 ref="+co5class="sref">s6a6a>) 5
<6 /genksyms/genksyms.c#L36ne" n6me="L308"> 308    ref">cxmalloturn UNKNOWNf4e=string"4clsa href="+code=5 ref="+co5class="sref">s6a7a>) 5
<6 ode=string" class="sref6     6            st *cxmalloturn }f4e=string"4clss"> 397                return 5
start4
5type" class=""" class="line" name="L310619a>) 5
<6  h49f="scripts/genksyms6 430<60328stsubt id="L31class="sref">c =  397       4beme="L333"> 333 424<*L386"> 386  ">pts/genksyms/syms.c#L4093pts/genks7exeturn"sref">65
6/a> * 3785
 430/* FIXME: Bad r="sref"> fsymsgcan segfault hsre. */f (xmalloc(sizeof(*c =  397<6a>   61 ==  386e. */f (xmalloc(sizeof(*) 5
<6"sref">string_list *6a hre61e=stribugfsym hreng4315"> 315            5
 308 397                       return xmalloc(sizeof(*) 5
<6st" class="sref">string_6ist         =no5e" class="srsyms.c#L4093 386        sy"sr1L> 32 class="line" name="L424"> 424<*L386"> 386  ">pts/genksym5ne" name="L405">   rd="L401" class="  rksym  */f (xmalloc(sizeof(*) 5
<6e=ne5t" class="sref">nex6561l:="+code=c" class="sref">c 3815
 414        5
 308    ref">c6/7a>) 5
<6ng*ef">a, structmpid6"L3736 class=tmpif="+code=a" class="sref">a &am6;& !<6lclass="l5ine" name="L416"> 4161a>5
 386 ="sref">strcmp( 386        sy"sr1L> 32 class="line" name="L424"> 424<*L386"> 386  ">pts/genksym5ne" name="L405">   rd="L401" class="  rksym  */f (xmalloc(sizeof(*) 5
<6"scripts/genksyms/genksy6s.c#L687" id="L385 class="l5s="sref">c 387 416xmalloc(sizeof(* 383 34615"> 315            6(nil)62"sref">c == NUL href="+code=fputs" class="sref"uizeof( 386 ="sref">strcmp(xmalloc(sizeof(*newnode5
 == xmalloc(sizeof(* 383 397     6     62e=stribugfsym hreng4315"> 315al_crc3i_on6" class="line" 3artial_crc3i_on66">6ef">f6
             "uizeof((sizeof(*newnode))5
c == string)5
b->             "uizeof( 416xxmalloc(sizeof(*n<6a>-&g62=a" class="sref"rcd="L319" class=crc"+corref">xmalloe" class="Lx 41subt id="L319" class="ubt i"+code=next" class="sref">next =  387nod6 62           st *c6a> }5
a,6struc62a>5
xmalloc(sizeof(*<6a>(sizeof6*6"L319" cl6ss=Lle3clasref">xmalloc<6a>(si63ef4 ode=star4 class="sref">start)4
 4286> ==  * 41ndrai="+code        xmalloc(sizeof(* 3325
b->string_lis"sref">c =  397href="+c5ass="sref">visitee/a>         386e. */f (xmalloc(sizeof(* 333 41ndrai="+cring_lis"sref">c =  397_trai==newref">xmalloc(sizeof(* 635 41ndrai="+code =  397href="+c5ass="sref">visitee/a>         38_trai==newref">xmalloc(sizeof(* }5
c ==  397href="+c5ass="sref">visitee/a>         38"+c.c#L389" id="L3895+code=nod5" class="sref">node)5
xmalloc(sizeof(*(sizeof6  while (pua>6"> 34L430"6 430<637" id="L385 class="l5_ L3d="L319" class=Lx6f">c 6  397      6     64ef4 ode=star4 class="sref">start)4
5
next5
 328sts6id="L619" cl class="sref">start)4
 6" class="sref">string_li6t64href5 class="l5ne" name="L332"> 3325
 34656 3325
 333e) 5
xmalloc(sizeof(*a, structmpid6"L37364node)5
next5
s6turn c5
 308c =  397 367pts/genks7exeturn"sref">6s/genksym6/genksyms.c#L3st *string_lis"sref">c =  397) class="l5ne" name="L332"> 3325
 348   6    565"sref">c == xmalloturn cpts/genks7exeturn"sref">6s_a d_crc6
6 h55> == 6span clnksyms/genksyms.c6L429"6">b-> 3405
pts/genks7exeturn"sref">6s="+cor> 6code=fgetc" classref">n<6a>-&g65" class=partial_crc3ims/genksyms.c#L424"has_changee/a>          ">pts/genks7exeturn"sref">6sref5+ cl6ref="+c5ne" name="L352">6352a,6struc65yms.c#L354" id="L355ls.enksyms.c#L306" id="ubt id="L319" class="ubt i"+coame="L386"> 386 Lx(sizeof6* 308 397     Eauort        =+colt;    return pts/genks7exeturn"sref">6s> }5
xmalloc<6a>(si6eof(*s6ring)6
a6/a>, 657" id="L385 class="l5ne" name="L417"n_trai="+code=symbol" Lxnode)5
xmalloc(sizeof(*5
 * 397href="+c5ass="sref">newnode))5
c == string)5
 697                re6urn <66 ==  416xnext5
b->xmalloe" class="Lx 41subt id="L319" class="ubt i"+code=nextenksyms/genksyms.c#L350" i0xffffffff) ^i0xfffffffft" class="sref">next5
 6
 3325
c == start>c5
 308" class="sref">c == string)5
node)5
xmalloc(sizeof(*node)5
ed =  397href="+c5ass="sref">newnode))5
string)5
s6++sref">x6alloc(sizeof(*a =  397href="+c5ass="sref">48" u         367 386e. */f (xmalloc(sizeof(* 386        c =eeeeeeeeode=tring_lis"sref">has_changee/a>        xmalloc(sizeof(*c == >c5
) 5
pts/genks7exeturn"sref">6> 3106            debugfsym hr6f="+c6de=stribugfsym hreng4315"> 315=NU5L" ctart>c5
         397           :       : modverksym     return   ">pts/genks7exeturn"sref">6>6f="scri66"> 386 partial_crc36d="L363" class=partial_crc3i310 15"> 315=NU5L" ctart>mp_defe"+cor> 397     changee because of changes     return   ">pts/genks7exeturn"sref">6>="+cor> 6ksyms.c#L347"crcd="L319"6class6crc"+co"srL386"> 386 parti15"> 315=NU5L" ctart>mp_defe"+cor> 397     in     return >mp_defe"+cor> 397     error    return                 6f (c>mp_defe"+cor> 397     warn97<    return pts/genks7exeturn"sref">6f">xmallo6(sizeof(*  ">pts/genks7exeturn"sref">6fts/genks6ef">n5
         397     ,     return   ">pts/genks7exeturn"sref">6f> }5
c == rart>c5
 424<*L386"de=ksyms/genksyms."de=ksym 67"> 367 424<*L386i  rd="L401" class="  rksym)/ge3 386  ">pts/genks7exeturn"sref">6f+sref">x6href=310            6"uize6f(>>>>>>>>ode=a" class="sref">a =  397href="+c5ass="sref">48" u         39wTATUS_DEFINEDpts/genksyms/gswTATUS_DEFINED> 386 Lxxmalloc(sizeof6*>c5
         397      (became 386i55 )    return   ">pts/genks7exeturn"sref">6f="+code=6" class="5ine" name="L376"> 376                         +gyms/genksyms.c#Lle3d6sion_trai6=new"ef="+code=c" class=6sref"6c ==  Lx 315    /genksymenksyms.c#L424"error19" class="ubt ierror<350"hretart" class="sref">start =  386 partial_crc36d="L363" class=partial_crc3i310  class="sref">start)4
 386 parti 397href="+c5ass="sref">newnode))5
pts/genks7exeturn"sref">634L430"> 630                if6(c5
 308id="L401" class="linref="+code=c" class="sref">c == start)4
tag6/a>5
        start)4
x6ss="crcd="L319" class=cr6"+co"6rL386"> 386 Lxc5
         397     \n    return   ">pts/genks7exeturn"sref">63name="L463"> 41subt id="L319" cla6s="ub69cclass="sfipts/genksyms/genksyms.c#L405" id=6 href="+c6de=5"+code=NU5class="sre6">new69/a5
 386 Lxxmalloturn ref=\n    return  367 308  ">pts/genks7exeturn"sref">636f="scri6me="L390"> 390pts/genks7exeturn"sref">63+co"srL36CT      .strcmp  ">pref="+cuis="same="L386"> 386         397           _L319"       = 0x     08lx =\n    return  367 367 367 387          class="sref">start)4
start)4
e69of(*s6ULL4
6a h49f="scripts/genksyms6g328"6 328 ="sref">strcmp<----------------------------------------------------------------------f="+cuis="same="L386"> 386         397                retu7n  397 397      7     70_ L36"> 3enksyms/genksyms.c#L328" id="L328" c7) 5
<7 h5ef="scripts/genksyms/7enksy70e=stribugfsym>c5
         397           :     d:     return :dump_defe"+cor> 397      lt;r8dinref=    return start)4
) 5
<7 /genksyms/genksyms.c#L37ne" n7me="L348" id=eturn  386 class="sref">node 3325
) 5
<7 ode=string" class="sref7     7      "> 3enksyms/genksyms.c#L328" id="L328" c7<8a>) 5
<7 of="+code=4nd" class="s7me="L70a>5
 386        sy"de=ksyms/genksyms."de=ksym5ne" name="L405">   rd="L401" class="  rksym)> 3enksyms/genksyms.c#L328" id="L328" c7<9a>) 5
<7  h49f="scripts/genksyms7 430<70328stsubt id="L31>c5
         397                      return  386        sy"de=ksyms/genksyms."de=ksym5ne" name="L405">   rd="L401" class="  rksym /syms.c#L4093pts/genks7exeturn"sref">75
  ">pts/genks7exeturn"sref">7/a> *         397               return pts/genks7exeturn"sref">7"sref"sre7">c =  397<7a>   71  class="sref">start)4
) 5
<7"sref">string_list *7a hre71pts/gge3 386  ">pts/genks7exeturn"sref">7"4a>) 5
<7st" class="sref">string_7istb 3enksyms/genksyms.c#L328" id="L328" c7"5a>) 5
<7e=ne5t" class="sref">nex7571l:="+"> 3enksyms/genksyms.c#L328" id="L328" c7" nam5="L714"> 414        5
bc == ) 5
<7ng*ef">a, structmpid7"L3737 class=tmpif="+code=a" class="sref">a &am7;& !<7lclass="l5ine" name="L417"> 4171a>5
xmalloc(sizeof(*) 5
<7"scripts/genksyms/genksy7s.c#L787" id="L385 class="l5>c5
) 5
pts/genks7exeturn"sref">7==  4172cclass="sfipts/genksyms/genksyms.c#L405" id=7uae6"> 34715"> 315            7(nil)72"sref">c == bb  ">pts/genks7exeturn"sref">7=sref"sre7            return  ==         bpts/genks7exeturn"sref">7=/a>) 5
<7s/gnksyms"> 397     7     72e=stribugfsym hreng43ref="+e" name="vabgnd name="L413"> 4vabgndsyms.enksyms.c#L306"arg19" class="ubt iarg1linr)/ge3 386  ">pts/genks7exeturn"sref">7=4a>) 5
<7
c5
utname="L387"> 387>utnsyms.emp_defe"+cor> 397size\n(sizeof(*pts/genks7exeturn"sref">7=5a>) 5
<7ipts/genksyms/genksyms.c7L429"72de=a" class="sref"rcd="L319" class=crc"+corr7+code=sta7code=fgetc" classref">n<7a>-&g72=a" class="sref"rcd="enksyms.c#L424"error19" class="ubt ierror<350"hretart" class="sref">start = nod7 72           st class="sref">start)4
a,7struc72a>5
< class="sref">start)4
start)4
xmalloc<7a>(si73ef4 o48" id=eturn  Lx 428xmalloc(sizeof(*xmalloturn Usagr:\n    return  397     izeof(*< [-adDTwqhV] ref= /path/to/.tmp_obj.ver\n    return  397     \n    return xmalloc(sizeof(*) 5
<7 clnksyms/genksyms.c#L427"st *c5
start)4
) 5
<797                re7urn <73" class=partial_crcump_defe"+cor> 397       -a, --arch=partial_crcSelect architecture\n    return xmalloc(sizeof(*) 5
<7ts/genksyms/g*genksyms.c7L429"73>b-> 397       -d, --"> 30gt;str the 38 30glevel (repeatable)\n    return xmalloc(sizeof(* 397       -D, --"ump354" id="L35Dump31subt 5 c">cxmalloc(sizeof(* 735 397       -r, --r+coputs" clas  Reef="+coputs" ">cxmalloc(sizeof(* }5
 397       -T, --"ump-ode=n clas Dump31subt 5 code=n geno clas\n    return xmalloc(sizeof(*) 5
<7  while (pua>6"> 34L430"7 430<737" id="L385 class="ump_defe"+cor> 397       -p, --preservr class="Preservr "+coputs" modverksyms or fail\n    return xmalloc(sizeof(*c 7  397      7     74f="+code=5l+code=NUump_defe"+cor> 397       -w, --warn97<1+code=NUEnable warn97<1\n    return xmalloc(sizeof(* 428c ==  397       -q, --quiet54" id="L35Disable warn97<1 (386zeof)\n    return xmalloc(sizeof(* ==  397       -h, --help354" id="L35P/gen this messagr\n    return xmalloc(sizeof(*) 5
<7 name="L328"> 328sts7id="L74e=stribugfsym hrengump_defe"+cor> 397       -V, --verksym  id="L35P/gen thr "+le">cxmalloc(sizeof(*) 5
<7" class="sref">string_li7t74href5#_crc333333333333333333333333333 386 ="sref">strcmp 386         347574>b-> 397       -a33333333333333333333Select architecture\n    return xmalloc(sizeof(* 333e) 5
 397       -d33333333333333333333Incre>str the 38 30glevel (repeatable)\n    return xmalloc(sizeof(*a, structmpid7"L37374 397       -D33333333333333333333Dump31subt 5 c">cxmalloc(sizeof(* }5
 397       -r clas               Reef="+coputs" ">cxmalloc(sizeof(* 397       -T clas               Dump31subt 5 code=n geno clas\n    return xmalloc(sizeof(* * 397       -p33333333333333333333Preservr "+coputs" modverksyms or fail\n    return xmalloc(sizeof(* 348   7    575"sref">c ==  397       -w33333333333333333333Enable warn97<1\n    return xmalloc(sizeof(* 397       -q33333333333333333333Disable warn97<1 (386zeof)\n    return xmalloc(sizeof(* == 7span clnksyms/genksyms.c7L429"7">b-> 397       -h33333333333333333333Prgen this messagr\n    return xmalloc(sizeof(*n<7a>-&g75" class=partial_crcump_defe"+cor> 397       -V33333333333333333333Prgen thr "+le">cxmalloc(sizeof(*7352strcmp 386        a,7struc75yms.c#L354" id="L35href="+ href5 newstderr/a>          ">pts/genks7exeturn"sref">7a>(sizeof7*start)4
xmalloc<7a>(si7eof(*s7ring)7
a7/a>, 757" idms/genksyms.c#L424"maim="+coputs" clasmaim" clams/genksyms.c#L424"argname="L387"> 387argnksym 6charnkksyms.c#L4093 387argvksym)> 3enksyms/genksyms.c#L328" id="L328" c7a>5
xmalloc(sizeof(* * 387FILE* 308           return  308           return   ">pts/genks7exeturn"sref">7f="+cor> 797                re7urn <76 ==   ">pts/genks7exeturn"sref">7fh55> == 7ts/genksyms/g*genksyms.c7L429"76pts/gge3 386  ">pts/genks7exeturn"sref">75="+cor> 7
start)4
c == sc#L389" id="L3895+codeoptsym="+coputs" clasoptsymksymrsyms.c#L4093xmalloc(sizeof(* 397     arch    return  397sizea(sizeof(*xmalloc(sizeof(* 397     38 30    return  397sized(sizeof(*xmalloc(sizeof(* }5
 397     warn97<1    return  397sizew(sizeof(*xmalloc(sizeof(*)7alloc(sizeof(* 397     quiet    return  397sizeq(sizeof(*xmalloc(sizeof(* 386         397     3ump    return  397sizeD(sizeof(*xmalloc(sizeof(*c ==  397     "+coputs"    return  397sizer(sizeof(*xmalloc(sizeof(* 397     3ump-ode=n    return  397sizeT(sizeof(*xmalloc(sizeof(* == 76"> 386 partial_crc37d="L373" class=partial_crc3i{ump_defe"+cor> 397     preservr    return  397sizep(sizeof(*xmalloc(sizeof(* 386 397     verksym    return  397sizeV(sizeof(*xmalloc(sizeof(*                7f ( 397     help    return  397sizeh(sizeof(*xmalloc(sizeof(*(sizeof(*start)4
n5
pts/genks7exeturn"sref">7f> }5
s7f+sref">x7href=310            7"uize7f( 308getopt_lassd="L401" class= htopt_lasssyms.enksyms.c#L306"argname="L387"> 387argnksym 6syms.c#L4093 387argvksym_dump_defe"+cor> 397     a:dwqVDr:T:ph    return s7ode=new, 7rref">xmalloc(sizeof7* 397                return  367 3enksyms/genksyms.c#L328" id="L328" c7f="+code=7" class="5ine" name="L377"> 377 ="sref">strcmp 386         ==  308getoptd="L401" class= htoptsyms.enksyms.c#L306"argname="L387"> 387argnksym 6syms.c#L4093 387argvksym_dump_defe"+cor> 397     a:dwqVDr:T:ph    return  367 3enksyms/genksyms.c#L328" id="L328" c7fh55> == 7            debugfsym hr7f="+c7de=str#endif33333333333333333333al_crcump_defe"+coref">strcmp 386         386 partial_crc37d="L373" class=partial_crc3iswitchrisyms.c#L4093xmalloc(sizeof(* 386c 397sizea(sizeof(* 730                if7(c5
 387archef5"h5
 308optarg="+coputs" clasoptargef5"/ge3 386  ">pts/genks7exeturn"sref">7ms/genksy7s.enksyms.e=type" class=7"ubt 7d="L319" class="ubt i"""""""""319" class=crc"+corref">xmalloc(sizeof(*<7e> }5
tag7/a>5
c 397sized(sizeof(*x7ss="crcd="L319" class=cr7"+co"7rL386"> 386 Lxc5
start =  41subt id="L319" cla7s="ub79f="+code=5l+code=NU5ne" name=319" class=crc"+corref">xmalloc(sizeof(*<7 href="+c7de=5"+code=NU5class="sre7">new79/a5
c 397sizew(sizeof(*                 +gyms/genksyms.c#Lle3d736f="scri7me="L390"> 390 315319" class=crc"+corref">xmalloc(sizeof(*<7 +co"srL37CT      .c 397sizeq(sizeof(*  ">pts/genks7exeturn"sref">7 = ip7s/genksyms/genksyms.c#L377"pua79=a" class="sref"rcd="L319" cl319" class=crc"+corref">xmalloc(sizeof(*<7 s/genksy7code=string" class="sref7>strL79="L319" class="ubt i"c">c 397sizeV(sizeof(*e79ode=c" class="sref">c == xmalloturn asgenksy 367          ">pts/genks7exeturn"sref">7ULL4
7a h49f="scripts/genksyms7g328"79L386"> 386 Lxxmalloc(sizeof(*<8ass="> 398                retu8n c 397sizeD(sizeof(* 398 38
5
a>                 +gyms/genksyms.c#Lle3d819" class8"line" f"> 397      8     80ass="l5ne" name="L389_a d_crc319" class=crc"+corref">xmalloc(sizeof(*<8a3" class8"e="L390"> 390c 397sizer(sizeof(* >c5
 38
5
a>                 +gyms/genksyms.c#Lle3d815" class8"NION      . 308fopem="+coputs" clasfopemsyms.enksyms.c#L306"optarg="+coputs" clasoptargef5"_dump_defe"+cor> 397     r    return   ">pts/genks7exeturn"sref">8a6a>) 5
<8 /genksyms/genksyms.c#L38ne" n80=a" class="sref"rcd="L319" clode=tring_lis"sref">.c#_lag_dump_defe="L308.c#_lag_*xmalloc(sizeof(*) 5
<8 ode=string" class="sref8     80syms/genksyms.c#L415" =no5e" class="s>c5
errorame="L387"> 387>errorsyms.enksyms.c#L306"optarg="+coputs" clasoptargef5")/ge3 386  ">pts/genks7exeturn"sref">8a8a>) 5
<8 of="+code=4nd" class="s8me="L80ode=c" class="sref">c == rartts/genka>                 +gyms/genksyms.c#Lle3d819a>) 5
<8  h49f="scripts/genksyms8 430<80328stsubt id="L3111111111 class="sref">start)4
xmalloc(sizeof(*<8/a> *c 397sizeT(sizeof(*c =  397<8a>   81ass="l5ne" name="L389_a d_crc>c5
 38
5
a>                 +gyms/genksyms.c#Lle3d8"/a>) 5
<8"sref">string_list *8a hre81e=stribugfsym hreng4315"> 315syms.c#L4093 308fopem="+coputs" clasfopemsyms.enksyms.c#L306"optarg="+coputs" clasoptargef5"_dump_defe"+cor> 397     w    return   ">pts/genks7exeturn"sref">8"4a>) 5
<8st" class="sref">string_8ist ode=tring_lis"sref">"umplag_dump_defe="L308"umplag_*xmalloc(sizeof(*) 5
<8e=ne5t" class="sref">nex8581l:="+code=c" class="sref">cc5
errorame="L387"> 387>errorsyms.enksyms.c#L306"optarg="+coputs" clasoptargef5")/ge3 386  ">pts/genks7exeturn"sref">8" nam5="L814"> 414        5
                 +gyms/genksyms.c#Lle3d8/7a>) 5
<8ng*ef">a, structmpid8"L37381syms/genksyms.c#L415" =no5e"  class="sref">start)4
 4181ode=c" class="sref">c == 319" class=crc"+corref">xmalloc(sizeof(*<8/9a>) 5
<8"scripts/genksyms/genksy8s.c#L887" id="L385 class="l5c">c 397sizep(sizeof(* 4182f="+code=5l+code=NU5ne" name=>c5
                 +gyms/genksyms.c#Lle3d8uae6"> 34815"> 315            8(nil)82"sref">c ==  == 319" class=crc"+corref">xmalloc(sizeof(*<8=sref"sre8            return  == c 397sizeh(sizeof(* 397     8     82e=stribugfsym hreng43e" name=>c5
  ">pts/genks7exeturn"sref">8=4a>) 5
<8
  ">pts/genks7exeturn"sref">8=5a>) 5
<8ipts/genksyms/genksyms.c8L429"82l:="+code=c" class="s386zeofn<8a>-&g82=a" class="sref"rcd="e" name=>c5
  ">pts/genks7exeturn"sref">8=7a>) 5
<8ne" nam5class="sref">nod8 82syms/genksyms.c#L415" =no5e" ts/genka>                 +gyms/genksyms.c#Lle3d8a> }5
a,8struc82ode=c" class="sref">c class="sref">start)4
         387archef5"_dump_defe"+cor> 397     h8300    return          387archef5"_dump_defe"+cor> 397     blackfin    return  3enksyms/genksyms.c#L328" id="L328" c8"L319" cl8ss=Lle3clasref">xmalloc<8a>(si83f="+code=5l+code=NU5nenksyms.c#L424"modaprefix/genksyms/gnksymodaprefixksymh5
 397     _    return                  +gyms/genksyms.c#Lle3d8"> 428c . */f (xmalloc(sizeof(*  ">pts/genks7exeturn"sref">8)/a>) 5
<8 clnksyms/genksyms.c#L428"st  ">pts/genks7exeturn"sref">8)4a>) 5
<897                re8urn <83href5 class="l5ne" name="L332"> 3325
) 5
<8ts/genksyms/g*genksyms.c8L429"83>b->c5
  ">pts/genks7exeturn"sref">8)code=sta8
c5
  ">pts/genks7exeturn"sref">8)7a>) 5
<8uffer5ine" name="L335"> 835a &am8)> }5
 308edtderr/a>          ">pts/genks7exeturn"sref">8)9a>) 5
<8  while (pua>6"> 34L430"8 430<837" id="L385 class="rcump_defe"+coref">strcmp6"buf("> 308 386        c 8  397      8     84f="+code=5l+c class="sref">start)4
start)4
 ==  386e. */f (xmalloc(sizeof(*) 5
<8 name="L328"> 328sts8id="L84e=stribugfsym hrengrc>c5
pts/genks7exeturn"sref">8d4a>) 5
<8" class="sref">string_li8t84" class=partial_crc3i>c5
pts/genks7exeturn"sref">8d5a>) 5
<8ss="5ne" name="L343"> 348584>b->start)4
e) 5
start)4
a, structmpid8"L37384pts/genks7exeturn"sref">8a> }5
s8turn         xmalloc(sizeof(* *node)5
xmalloc(sizeof(* 428 348   8    585"sref">c == node)5
node.lagclass="sref">evisited_s>c        c 38/ge3 386  ">pts/genks7exeturn"sref">8s_a d_crc8
pts/genks7exeturn"sref">8s/a>) 5
<8span clnksyms/genksyms.c8L429"8">b->a =  397href="+c5ass="sref">is_overrid"9" class="ubt iis_overrid"ksym)> 3enksyms/genksyms.c#L328" id="L328" c8s="+cor> 8code=fgetc" classref">n<8a>-&g85" class=partial_crcccccccccccccccccccxmalloturn overrid"     return   ">pts/genks7exeturn"sref">8s5a>) 5
<8ref="+c5ne" name="L352">8352c 386        sy>a =  397href="+c5ass="sref">"de=ksyms/genksyms."de=ksym5ne" name="L405"> ksyms/genksyms.n> 386e. */f (xmalloc(sizeof(*a,8struc85yms.c#L354" id="L35cccccccccccccccccc 387>utnsyms.eyms.c#L4093 386        sy>a =  397href="+c5ass="sref">"de=ksyms/genksyms."de=ksym5ne" name="L405"> ksyms/genksyms.n> 38 href5 class="l5n"umplag_dump_defe="L308"umplag_*  ">pts/genks7exeturn"sref">8s7a>) 5
<8* 387>utnsyms.emp_defe"+cor> 397size#(sizeof(*  ">pts/genks7exeturn"sref">8s> }5
xmalloc<8a>(si85ode=c" class="sref">c ==  class="sref">start)4
a8/a>, 85L386"> 386 Lxc5
sy>a =  397href="+c5ass="sref">/gefksyms/genksyms.na rksym /syms.c#L4093  ">pts/genks7exeturn"sref">8a>5
c5
utname="L387"> 387>utnsyms.emp_defe"+cor> 397size (sizeof(*  ">pts/genks7exeturn"sref">8f="script8/genksyms/genksyms.c#L428"stc == a =  397href="+c5ass="sref">is_exteen9" class="ubt iis_exteenksym)> 3enksyms/genksyms.c#L328" id="L328" c8f="+cor> 897                re8urn <86 == xmalloturn exteenk    return   ">pts/genks7exeturn"sref">8fh55> == 8ts/genksyms/g*genksyms.c8L429"86e=stribugfsym hreng43e" name=>c5
bsy"umplag_dump_defe="L308"umplag_* =  397href="+c5ass="sref">defn9" class="ubt idefn*  ">pts/genks7exeturn"sref">8f="+cor> 8
 >c5
utname="L387"> 387>utnsyms.emp_defe"+cor> 397size\n(sizeof(*  ">pts/genks7exeturn"sref">8f5a>) 5
<8="sref">c == edL3a> =  397href="+c5ass="sref">visited/a>         38/ge3 386  ">pts/genks7exeturn"sref">8pts/genks8ms/genksyms/genksyms.c#L828" i8="L328" class="line" n310 >c5
 =  397href="+c5ass="sref">visited/a>         38h5
 308           return   ">pts/genks7exeturn"sref">8p> }5
start)4
start)4
 386        c ode=>c5
xmalloc(sizeof(* 308 397     Hash table occup_dcy      d/     dh5
     g\n    return xmalloc(sizeof(* == 86"> 386 partial_crc38d="L383" class=partial_crc3i hreng43xmalloc(sizeof(* 386  ">pts/genks7exeturn"sref">86=c" clas8 430                8f (b->start)4
start)4
n5
  ">pts/genks7exeturn"sref">8f> }5
start)4
x8href=310            8"uize8f(


The original LXR software by thr lass="srehttp://sourceforge.net/projecartlxe">LXR ef">unity*stral verksym by lass="sremailto:lxe@> ux.no">lxe@> ux.no* lxe.> ux.no kindly hosted by lass="srehttp://www.redpill-> pro.no">Redpill L pro AS*