|
@@ -44,7 +44,7 @@ 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;
|
|
|
+ flag_preserve, flag_warnings, flag_rel_crcs;
|
|
|
static const char *mod_prefix = "";
|
|
|
|
|
|
static int errors;
|
|
@@ -693,7 +693,10 @@ void export_symbol(const char *name)
|
|
|
fputs(">\n", debugfile);
|
|
|
|
|
|
/* Used as a linker script. */
|
|
|
- printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc);
|
|
|
+ printf(!flag_rel_crcs ? "%s__crc_%s = 0x%08lx;\n" :
|
|
|
+ "SECTIONS { .rodata : ALIGN(4) { "
|
|
|
+ "%s__crc_%s = .; LONG(0x%08lx); } }\n",
|
|
|
+ mod_prefix, name, crc);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -730,7 +733,7 @@ void error_with_pos(const char *fmt, ...)
|
|
|
|
|
|
static void genksyms_usage(void)
|
|
|
{
|
|
|
- fputs("Usage:\n" "genksyms [-adDTwqhV] > /path/to/.tmp_obj.ver\n" "\n"
|
|
|
+ fputs("Usage:\n" "genksyms [-adDTwqhVR] > /path/to/.tmp_obj.ver\n" "\n"
|
|
|
#ifdef __GNU_LIBRARY__
|
|
|
" -s, --symbol-prefix Select symbol prefix\n"
|
|
|
" -d, --debug Increment the debug level (repeatable)\n"
|
|
@@ -742,6 +745,7 @@ static void genksyms_usage(void)
|
|
|
" -q, --quiet Disable warnings (default)\n"
|
|
|
" -h, --help Print this message\n"
|
|
|
" -V, --version Print the release version\n"
|
|
|
+ " -R, --relative-crc Emit section relative symbol CRCs\n"
|
|
|
#else /* __GNU_LIBRARY__ */
|
|
|
" -s Select symbol prefix\n"
|
|
|
" -d Increment the debug level (repeatable)\n"
|
|
@@ -753,6 +757,7 @@ static void genksyms_usage(void)
|
|
|
" -q Disable warnings (default)\n"
|
|
|
" -h Print this message\n"
|
|
|
" -V Print the release version\n"
|
|
|
+ " -R Emit section relative symbol CRCs\n"
|
|
|
#endif /* __GNU_LIBRARY__ */
|
|
|
, stderr);
|
|
|
}
|
|
@@ -774,13 +779,14 @@ int main(int argc, char **argv)
|
|
|
{"preserve", 0, 0, 'p'},
|
|
|
{"version", 0, 0, 'V'},
|
|
|
{"help", 0, 0, 'h'},
|
|
|
+ {"relative-crc", 0, 0, 'R'},
|
|
|
{0, 0, 0, 0}
|
|
|
};
|
|
|
|
|
|
- while ((o = getopt_long(argc, argv, "s:dwqVDr:T:ph",
|
|
|
+ while ((o = getopt_long(argc, argv, "s:dwqVDr:T:phR",
|
|
|
&long_opts[0], NULL)) != EOF)
|
|
|
#else /* __GNU_LIBRARY__ */
|
|
|
- while ((o = getopt(argc, argv, "s:dwqVDr:T:ph")) != EOF)
|
|
|
+ while ((o = getopt(argc, argv, "s:dwqVDr:T:phR")) != EOF)
|
|
|
#endif /* __GNU_LIBRARY__ */
|
|
|
switch (o) {
|
|
|
case 's':
|
|
@@ -823,6 +829,9 @@ int main(int argc, char **argv)
|
|
|
case 'h':
|
|
|
genksyms_usage();
|
|
|
return 0;
|
|
|
+ case 'R':
|
|
|
+ flag_rel_crcs = 1;
|
|
|
+ break;
|
|
|
default:
|
|
|
genksyms_usage();
|
|
|
return 1;
|