Message ID | 20150907144612.GA5256@msticlxl57.ims.intel.com |
---|---|
State | New |
Headers | show |
On Mon, Sep 07, 2015 at 05:46:12PM +0300, Ilya Verbin wrote: > On Sat, Sep 05, 2015 at 00:45:36 +0300, Ilya Verbin wrote: > > 2015-09-04 22:27 GMT+03:00 Mike Stump <mikestump@comcast.net>: > > > On Sep 4, 2015, at 4:10 AM, Hahnfeld, Jonas <Hahnfeld@itc.rwth-aachen.de> wrote: > > >>>>> * intelmic-mkoffload.c (prepare_target_image): Fix if the temp path > > >>>>> contains a '-‘. > > > > > > So, out of curiosity, did you test all characters other than null? If - doesn’t work, there is a good chance that no such test has been done, and there is a small hoard of bugs, all the same in there. > > > > Good point. Objcopy in bfd/binary.c creates symbol names this way: > > > > for (p = buf; *p; p++) > > if (! ISALNUM (*p)) > > *p = '_'; > > > > We should do the same in intelmic-mkoffload.c. I will prepare a patch. > > gcc/ > * config/i386/intelmic-mkoffload.c (prepare_target_image): Handle all > non-alphanumeric characters in the symbol name. > > Regtested on x86_64-linux. OK for trunk? OK for gcc-5-branch? Ok for both. Jakub
diff --git a/gcc/config/i386/intelmic-mkoffload.c b/gcc/config/i386/intelmic-mkoffload.c index 49e99e8..4a7812c 100644 --- a/gcc/config/i386/intelmic-mkoffload.c +++ b/gcc/config/i386/intelmic-mkoffload.c @@ -453,17 +453,18 @@ prepare_target_image (const char *target_compiler, int argc, char **argv) fork_execute (objcopy_argv[0], CONST_CAST (char **, objcopy_argv), false); /* Objcopy has created symbols, containing the input file name with - special characters replaced with '_'. We are going to rename these - new symbols. */ + non-alphanumeric characters replaced by underscores. + We are going to rename these new symbols. */ size_t symbol_name_len = strlen (target_so_filename); char *symbol_name = XALLOCAVEC (char, symbol_name_len + 1); - for (size_t i = 0; i <= symbol_name_len; i++) + for (size_t i = 0; i < symbol_name_len; i++) { char c = target_so_filename[i]; - if (c == '/' || c == '.' || c == '-') + if (!ISALNUM (c)) c = '_'; symbol_name[i] = c; } + symbol_name[symbol_name_len] = '\0'; char *opt_for_objcopy[3]; opt_for_objcopy[0] = XALLOCAVEC (char, sizeof ("_binary__start=")