From 28f815927f4195aff9d5af22697b4faab3dac6e3 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 1 Aug 2001 02:27:11 +0000 Subject: [PATCH] * config/tc-i386.c (lex_got): Match lower case relocation tokens. Don't allocate more space than necessary for the input line copy. --- gas/ChangeLog | 5 +++++ gas/config/tc-i386.c | 28 +++++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 2c78722c179..eaa252a6568 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2001-08-01 Alan Modra + + * config/tc-i386.c (lex_got): Match lower case relocation tokens. + Don't allocate more space than necessary for the input line copy. + 2001-08-01 Alan Modra * read.c: Standardize error/warning messages - don't capitalise, no diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index bea0f4db075..275b3e6c439 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -3181,27 +3181,41 @@ lex_got (reloc, adjust) int len; len = strlen (gotrel[j].str); - if (strncmp (cp + 1, gotrel[j].str, len) == 0) + if (strncasecmp (cp + 1, gotrel[j].str, len) == 0) { if (gotrel[j].rel[(unsigned int) flag_code] != 0) { - int first; - char *tmpbuf; + int first, second; + char *tmpbuf, *past_reloc; *reloc = gotrel[j].rel[(unsigned int) flag_code]; + if (adjust) + *adjust = len; if (GOT_symbol == NULL) GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME); /* Replace the relocation token with ' ', so that errors like foo@GOTOFF1 will be detected. */ + + /* The length of the first part of our input line. */ first = cp - input_line_pointer; - tmpbuf = xmalloc (strlen (input_line_pointer)); + + /* The second part goes from after the reloc token until + (and including) an end_of_line char. Don't use strlen + here as the end_of_line char may not be a NUL. */ + past_reloc = cp + 1 + len; + for (cp = past_reloc; !is_end_of_line[(unsigned char) *cp++]; ) + ; + second = cp - past_reloc; + + /* Allocate and copy string. The trailing NUL shouldn't + be necessary, but be safe. */ + tmpbuf = xmalloc (first + second + 2); memcpy (tmpbuf, input_line_pointer, first); tmpbuf[first] = ' '; - strcpy (tmpbuf + first + 1, cp + 1 + len); - if (adjust) - *adjust = len; + memcpy (tmpbuf + first + 1, past_reloc, second); + tmpbuf[first + second + 1] = '\0'; return tmpbuf; } -- 2.30.2