mirror of https://gitee.com/openkylin/linux.git
genksyms: Do not expand internal types
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.
This commit is contained in:
parent
b06fcd6c83
commit
2c5925d6b7
|
@ -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;
|
||||
|
|
|
@ -37,6 +37,7 @@ enum symbol_status {
|
|||
struct string_list {
|
||||
struct string_list *next;
|
||||
enum symbol_type tag;
|
||||
int in_source_file;
|
||||
char *string;
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue