268a13a5a3
This is the next patch in the ongoing series to move gdbsever to the top level. This patch just renames the "common" directory. The idea is to do this move in two parts: first rename the directory (this patch), then move the directory to the top. This approach makes the patches a bit more tractable. I chose the name "gdbsupport" for the directory. However, as this patch was largely written by sed, we could pick a new name without too much difficulty. Tested by the buildbot. gdb/ChangeLog 2019-07-09 Tom Tromey <tom@tromey.com> * contrib/ari/gdb_ari.sh: Change common to gdbsupport. * configure: Rebuild. * configure.ac: Change common to gdbsupport. * gdbsupport: Rename from common. * acinclude.m4: Change common to gdbsupport. * Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES) (HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to gdbsupport. * aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c, amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c, amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c, amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c, amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c, arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c, arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c, arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c, arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c, auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h, btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c, charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c, cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c, coff-pe-read.c, command.h, compile/compile-c-support.c, compile/compile-c.h, compile/compile-cplus-symbols.c, compile/compile-cplus-types.c, compile/compile-cplus.h, compile/compile-loc2c.c, compile/compile.c, completer.c, completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c, cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c, darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c, disasm.h, dtrace-probe.c, dwarf-index-cache.c, dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c, dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c, event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c, features/aarch64-core.c, features/aarch64-fpu.c, features/aarch64-pauth.c, features/aarch64-sve.c, features/i386/32bit-avx.c, features/i386/32bit-avx512.c, features/i386/32bit-core.c, features/i386/32bit-linux.c, features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c, features/i386/32bit-segments.c, features/i386/32bit-sse.c, features/i386/64bit-avx.c, features/i386/64bit-avx512.c, features/i386/64bit-core.c, features/i386/64bit-linux.c, features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c, features/i386/64bit-segments.c, features/i386/64bit-sse.c, features/i386/x32-core.c, features/riscv/32bit-cpu.c, features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c, features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c, features/riscv/64bit-fpu.c, features/tic6x-c6xp.c, features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h, findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h, gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c, gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c, go32-nat.c, guile/guile.c, guile/scm-ports.c, guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c, i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c, i386-linux-tdep.c, i386-tdep.c, i387-tdep.c, ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c, inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h, inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h, inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c, linux-tdep.c, linux-thread-db.c, location.c, machoread.c, macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h, mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h, minsyms.c, mips-linux-tdep.c, namespace.h, nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h, nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c, nat/amd64-linux-siginfo.c, nat/fork-inferior.c, nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c, nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c, nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h, nat/linux-waitpid.c, nat/mips-linux-watch.c, nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c, nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c, nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h, obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c, parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c, procfs.c, producer.c, progspace.h, psymtab.h, python/py-framefilter.c, python/py-inferior.c, python/py-ref.h, python/py-type.c, python/python.c, record-btrace.c, record-full.c, record.c, record.h, regcache-dump.c, regcache.c, regcache.h, remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c, riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c, selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c, ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c, source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c, stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h, symtab.c, symtab.h, target-descriptions.c, target-descriptions.h, target-memory.c, target.c, target.h, target/waitstatus.c, target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c, top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c, tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h, unittests/array-view-selftests.c, unittests/child-path-selftests.c, unittests/cli-utils-selftests.c, unittests/common-utils-selftests.c, unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c, unittests/format_pieces-selftests.c, unittests/function-view-selftests.c, unittests/lookup_name_info-selftests.c, unittests/memory-map-selftests.c, unittests/memrange-selftests.c, unittests/mkdir-recursive-selftests.c, unittests/observable-selftests.c, unittests/offset-type-selftests.c, unittests/optional-selftests.c, unittests/parse-connection-spec-selftests.c, unittests/ptid-selftests.c, unittests/rsp-low-selftests.c, unittests/scoped_fd-selftests.c, unittests/scoped_mmap-selftests.c, unittests/scoped_restore-selftests.c, unittests/string_view-selftests.c, unittests/style-selftests.c, unittests/tracepoint-selftests.c, unittests/unpack-selftests.c, unittests/utils-selftests.c, unittests/xml-utils-selftests.c, utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c, value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c, xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c, xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport. gdb/gdbserver/ChangeLog 2019-07-09 Tom Tromey <tom@tromey.com> * configure: Rebuild. * configure.ac: Change common to gdbsupport. * acinclude.m4: Change common to gdbsupport. * Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS) (version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change common to gdbsupport. * ax.c, event-loop.c, fork-child.c, gdb_proc_service.h, gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c, inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c, linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c, linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c, linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h, nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c, server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h, thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change common to gdbsupport.
168 lines
5.6 KiB
C++
168 lines
5.6 KiB
C++
/* Character set conversion support for GDB.
|
||
Copyright (C) 2001-2019 Free Software Foundation, Inc.
|
||
|
||
This file is part of GDB.
|
||
|
||
This program is free software; you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation; either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||
|
||
#ifndef CHARSET_H
|
||
#define CHARSET_H
|
||
|
||
#include "gdbsupport/def-vector.h"
|
||
|
||
/* If the target program uses a different character set than the host,
|
||
GDB has some support for translating between the two; GDB converts
|
||
characters and strings to the host character set before displaying
|
||
them, and converts characters and strings appearing in expressions
|
||
entered by the user to the target character set.
|
||
|
||
GDB's code pretty much assumes that the host character set is some
|
||
superset of ASCII; there are plenty if ('0' + n) expressions and
|
||
the like. */
|
||
|
||
/* Return the name of the current host/target character set. The
|
||
result is owned by the charset module; the caller should not free
|
||
it. */
|
||
const char *host_charset (void);
|
||
const char *target_charset (struct gdbarch *gdbarch);
|
||
const char *target_wide_charset (struct gdbarch *gdbarch);
|
||
|
||
/* These values are used to specify the type of transliteration done
|
||
by convert_between_encodings. */
|
||
enum transliterations
|
||
{
|
||
/* Error on failure to convert. */
|
||
translit_none,
|
||
/* Transliterate to host char. */
|
||
translit_char
|
||
};
|
||
|
||
/* Convert between two encodings.
|
||
|
||
FROM is the name of the source encoding.
|
||
TO is the name of the target encoding.
|
||
BYTES holds the bytes to convert; this is assumed to be characters
|
||
in the target encoding.
|
||
NUM_BYTES is the number of bytes.
|
||
WIDTH is the width of a character from the FROM charset, in bytes.
|
||
For a variable width encoding, WIDTH should be the size of a "base
|
||
character".
|
||
OUTPUT is an obstack where the converted data is written. The
|
||
caller is responsible for initializing the obstack, and for
|
||
destroying the obstack should an error occur.
|
||
TRANSLIT specifies how invalid conversions should be handled. */
|
||
|
||
void convert_between_encodings (const char *from, const char *to,
|
||
const gdb_byte *bytes,
|
||
unsigned int num_bytes,
|
||
int width, struct obstack *output,
|
||
enum transliterations translit);
|
||
|
||
|
||
/* These values are used by wchar_iterate to report errors. */
|
||
enum wchar_iterate_result
|
||
{
|
||
/* Ordinary return. */
|
||
wchar_iterate_ok,
|
||
/* Invalid input sequence. */
|
||
wchar_iterate_invalid,
|
||
/* Incomplete input sequence at the end of the input. */
|
||
wchar_iterate_incomplete,
|
||
/* EOF. */
|
||
wchar_iterate_eof
|
||
};
|
||
|
||
/* An iterator that returns host wchar_t's from a target string. */
|
||
class wchar_iterator
|
||
{
|
||
public:
|
||
|
||
/* Create a new character iterator which returns wchar_t's. INPUT is
|
||
the input buffer. BYTES is the number of bytes in the input
|
||
buffer. CHARSET is the name of the character set in which INPUT is
|
||
encoded. WIDTH is the number of bytes in a base character of
|
||
CHARSET.
|
||
|
||
This constructor can throw on error. */
|
||
wchar_iterator (const gdb_byte *input, size_t bytes, const char *charset,
|
||
size_t width);
|
||
|
||
~wchar_iterator ();
|
||
|
||
/* Perform a single iteration of a wchar_t iterator.
|
||
|
||
Returns the number of characters converted. A negative result
|
||
means that EOF has been reached. A positive result indicates the
|
||
number of valid wchar_ts in the result; *OUT_CHARS is updated to
|
||
point to the first valid character.
|
||
|
||
In all cases aside from EOF, *PTR is set to point to the first
|
||
converted target byte. *LEN is set to the number of bytes
|
||
converted.
|
||
|
||
A zero result means one of several unusual results. *OUT_RESULT is
|
||
set to indicate the type of un-ordinary return.
|
||
|
||
wchar_iterate_invalid means that an invalid input character was
|
||
seen. The iterator is advanced by WIDTH (the argument to
|
||
the wchar_iterator constructor) bytes.
|
||
|
||
wchar_iterate_incomplete means that an incomplete character was
|
||
seen at the end of the input sequence.
|
||
|
||
wchar_iterate_eof means that all bytes were successfully
|
||
converted. The other output arguments are not set. */
|
||
int iterate (enum wchar_iterate_result *out_result, gdb_wchar_t **out_chars,
|
||
const gdb_byte **ptr, size_t *len);
|
||
|
||
private:
|
||
|
||
/* The underlying iconv descriptor. */
|
||
#ifdef PHONY_ICONV
|
||
int m_desc;
|
||
#else
|
||
iconv_t m_desc;
|
||
#endif
|
||
|
||
/* The input string. This is updated as we convert characters. */
|
||
const gdb_byte *m_input;
|
||
/* The number of bytes remaining in the input. */
|
||
size_t m_bytes;
|
||
|
||
/* The width of an input character. */
|
||
size_t m_width;
|
||
|
||
/* The output buffer. */
|
||
gdb::def_vector<gdb_wchar_t> m_out;
|
||
};
|
||
|
||
|
||
|
||
/* GDB needs to know a few details of its execution character set.
|
||
This knowledge is isolated here and in charset.c. */
|
||
|
||
/* The escape character. */
|
||
#define HOST_ESCAPE_CHAR 27
|
||
|
||
/* Convert a letter, like 'c', to its corresponding control
|
||
character. */
|
||
char host_letter_to_control_character (char c);
|
||
|
||
/* Convert a hex digit character to its numeric value. E.g., 'f' is
|
||
converted to 15. This function assumes that C is a valid hex
|
||
digit. Both upper- and lower-case letters are recognized. */
|
||
int host_hex_value (char c);
|
||
|
||
#endif /* CHARSET_H */
|