diff options
author | Jim Wilson <jimw@sifive.com> | 2017-11-22 11:20:48 -0800 |
---|---|---|
committer | Jim Wilson <jimw@sifive.com> | 2017-11-22 11:20:48 -0800 |
commit | 2469b3c58447e98e073ffe7ab6c9627dbbd1aa81 (patch) | |
tree | 592138d61a0971779b191a8f27ab818bce9f4e76 /gas/read.c | |
parent | 2ca23e65f562bd0efa7c483a99b49cc3d5118a58 (diff) | |
download | gdb-2469b3c58447e98e073ffe7ab6c9627dbbd1aa81.zip gdb-2469b3c58447e98e073ffe7ab6c9627dbbd1aa81.tar.gz gdb-2469b3c58447e98e073ffe7ab6c9627dbbd1aa81.tar.bz2 |
Riscv ld-elf/stab failure and fake label cleanup.
* as.c: Include write.h.
(common_emul_init): Use FAKE_LABEL_NAME.
* ecoff.c (add_file, ecoff_directive_end, ecoff_directive_loc):
Likewise.
(ecoff_build_symbols): Use FAKE_LABEL_CHAR.
* expr.c (get_symbol_name): Use FAKE_LABEL_CHAR. Accept only if
input_from_string is TRUE.
* read.c (input_from_string): New.
(read_symbol_name): Use FAKE_LABEL_CHAR. Accept only if
input_from_string is TRUE.
(temp_ilp): Set input_from_string to TRUE.
(restore_ilp): Set input_from_string to FALSE.
* read.h (input_from_string): Declare.
* symbols.c: Include write.h
(S_IS_LOCAL): Check for FAKE_LABEL_CHAR.
(symbol_relc_make_sym): Fix comment refering to default fake label
string.
* write.h (FAKE_LABEL_CHAR): New.
* config/tc-riscv.h (FAKE_LABEL_CHAR): Define.
* testsuite/gas/all/err-fakelabel.s: New.
Diffstat (limited to 'gas/read.c')
-rw-r--r-- | gas/read.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -62,6 +62,7 @@ #endif char *input_line_pointer; /*->next char of source file to parse. */ +bfd_boolean input_from_string = FALSE; #if BITS_PER_CHAR != 8 /* The following table is indexed by[(char)] and will break if @@ -1684,16 +1685,16 @@ read_symbol_name (void) if (mbstowcs (NULL, name, len) == (size_t) -1) as_warn (_("symbol name not recognised in the current locale")); } - else if (is_name_beginner (c) || c == '\001') + else if (is_name_beginner (c) || (input_from_string && c == FAKE_LABEL_CHAR)) { ptrdiff_t len; name = input_line_pointer - 1; - /* We accept \001 in a name in case this is + /* We accept FAKE_LABEL_CHAR in a name in case this is being called with a constructed string. */ while (is_part_of_name (c = *input_line_pointer++) - || c == '\001') + || (input_from_string && c == FAKE_LABEL_CHAR)) ; len = (input_line_pointer - name) - 1; @@ -6385,6 +6386,7 @@ temp_ilp (char *buf) input_line_pointer = buf; buffer_limit = buf + strlen (buf); + input_from_string = TRUE; } /* Restore a saved input line pointer. */ @@ -6396,6 +6398,7 @@ restore_ilp (void) input_line_pointer = saved_ilp; buffer_limit = saved_limit; + input_from_string = FALSE; saved_ilp = NULL; } |