Skip to content

Commit

Permalink
genksyms: Do not expand internal types
Browse files Browse the repository at this point in the history
Consider structures, unions and enums defined in the source file as
internal and do not expand them. This way, changes to e.g. struct
serial_private in drivers/tty/serial/8250_pci.c will not affect the
checksum of the pciserial_* exports.
  • Loading branch information
michal42 committed Oct 11, 2011
1 parent b06fcd6 commit 2c5925d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 2 deletions.
3 changes: 2 additions & 1 deletion scripts/genksyms/genksyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ static struct symbol *symtab[HASH_BUCKETS];
static FILE *debugfile;

int cur_line = 1;
char *cur_filename;
char *cur_filename, *source_file;
int in_source_file;

static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
flag_preserve, flag_warnings;
Expand Down
4 changes: 3 additions & 1 deletion scripts/genksyms/genksyms.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ enum symbol_status {
struct string_list {
struct string_list *next;
enum symbol_type tag;
int in_source_file;
char *string;
};

Expand All @@ -57,7 +58,8 @@ typedef struct string_list **yystype;
#define YYSTYPE yystype

extern int cur_line;
extern char *cur_filename;
extern char *cur_filename, *source_file;
extern int in_source_file;

struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
struct symbol *add_symbol(const char *name, enum symbol_type type,
Expand Down
8 changes: 8 additions & 0 deletions scripts/genksyms/lex.l
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ MC_TOKEN ([~%^&*+=|<>/-]=)|(&&)|("||")|(->)|(<<)|(>>)
cur_node->tag = \
find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\
SYM_ENUM_CONST : SYM_NORMAL ; \
cur_node->in_source_file = in_source_file; \
} while (0)
#define APP _APP(yytext, yyleng)
Expand Down Expand Up @@ -166,6 +167,13 @@ repeat:
cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1);
cur_line = atoi(yytext+2);
if (!source_file) {
source_file = xstrdup(cur_filename);
in_source_file = 1;
} else {
in_source_file = (strcmp(cur_filename, source_file) == 0);
}
goto repeat;
}
Expand Down
7 changes: 7 additions & 0 deletions scripts/genksyms/parse.y
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ static void record_compound(struct string_list **keyw,
enum symbol_type type)
{
struct string_list *b = *body, *i = *ident, *r;

if (i->in_source_file) {
remove_node(keyw);
(*ident)->tag = type;
remove_list(body, ident);
return;
}
r = copy_node(i); r->tag = type;
r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL;
add_symbol(i->string, type, b, is_extern);
Expand Down

0 comments on commit 2c5925d

Please sign in to comment.