[v3] gdb/riscv: Add record support for rv64gc instructions
Checks
Commit Message
This commit adds record full support for rv64gc instrcution.
It includes changes to the following files:
- gdb/riscv-linux-tdep.c, gdb/riscv-linux-tdep.h: adds facilities to record
syscalls.
- gdb/riscv-tdep.c, gdb/riscv-tdep.h: adds facilities to record execution of
rv64gc instructions.
- gdb/configure.tgt: adds new files for compilation.
- gdb/testsuite/lib/gdb.exp: enables testing of full record mode for RISC-V
targets.
- gdb/syscalls/riscv-canonicalize-syscall-gen.py: a script to generate function
that canonicalizes RISC-V syscall. This script can simply support for syscalls
on rv32 system. To use this script you need to pass a path to a file with
syscalls description from riscv-glibc (example is in the help message). The
script produces a mapping from syscall names to gdb_syscall enum.
- gdb/riscv-canonicalize-syscall.c: the file generated by the previous script.
Timur Golubovich timurgol007@gmail.com
Hi!
> >> + switch (syscall)
> >> + {
> >> + case 0: // #define __NR_io_setup 0
> >>
> >> All comments should be in the form /* */, rather than //
> >>
>>> I would also prefer if this followed what other architectures do,
>>> defining an enum to relate syscall numbers in a RISCV system to their
>>> names, and then this function returning the gdb_sys enum numbers,
>>> however I don't expect to be working on RISCV in the near future, so
>>> feel free to ignore this comment if the other RISCV maintainers are ok
>>> with this style. This would make it so no #define comment is necessary
>> Decided to make a script generating function that canonicalizes RISC-V syscall.
>> This solution will simplify adding record support for rv32 system. I also left
>> place for corner cases in generating script as they always may exist. Also
>> removed this #define comment from generating script.
>
> I see. This makes sense.
>
> I would like to see this explanation on the commit message, so that it
> is recorded why Risc-V works different to all other arches.
Could you please double-check the commit message? I tried to make it more
detailed. Do you think I need to provide additional information?
>>> +
>>> + if (m_length == 2)
>>> + return record_insn_len2 (ival, regcache, gdbarch);
>>> +
>>> + /* 6 bytes or more. If the instruction is longer than 8 bytes, we don't
>>> +have full instruction bits in ival. At least, such long instructions
>>> +are not defined yet, so just ignore it. */
>>> Again, the indentation here is incorrect. Lines should start in the same column as the number 6.
>> Addressed
>>
>> Best wishes,
>> Timur Golubovich
>>
>> Timur Golubovich timurgol007@gmail.com
>
> As I mentioned in the first review, please add some commit message
> explaining a bit of what your patch is doing. I would recommend
> explaining the inspiration for how riscv-tdep handles the recording (I
> guess aarch64) and why you changed it; plus explaining the idea behind
> the python script.c
Added this information to the commit message.
>> /* The following value is derived from __NR_rt_sigreturn in
>> <include/uapi/asm-generic/unistd.h> from the Linux source tree. */
>> @@ -173,6 +178,250 @@ riscv_linux_syscall_next_pc (const frame_info_ptr &frame)
>> return pc + 4 /* Length of the ECALL insn. */;
>> }
>>
>> +/* RISC-V process record-replay constructs: syscall, signal etc. */
>> +
>> +static linux_record_tdep riscv_linux_record_tdep;
>> +
>> +/* Record all registers but PC register for process-record. */
>> +
>> +using regnum_type = int;
>> +
>> +static bool
>> +save_registers (struct regcache *regcache, regnum_type fir, regnum_type last)
>
> Please fully type the variable names (fir -> first). Even if this makes
> you need to use multiple lines for the function, I think this makes the
> function easier to understand in the future.
>
> Sorry about not mentioning this before, I missed it in my first pass.
Addressed
>> + if (syscall_gdb == gdb_sys_sigreturn || syscall_gdb == gdb_sys_rt_sigreturn)
>> + {
>> + if (!riscv_all_but_pc_registers_record (regcache))
>> + return -1;
>> + return 0;
>> + }
>> +
>> + auto ret = record_linux_system_call (syscall_gdb, regcache,
>> + &riscv_linux_record_tdep);
>> + if (ret != 0)
>> + return ret;
>> +
>> + /* Record the return value of the system call. */
>> + if (record_full_arch_list_add_reg (regcache, RISCV_A0_REGNUM))
>> + return -1;
>> +
>> + return 0;
>> +}
>> +
>> +/* Initialize the riscv64_linux_record_tdep. */
>> +/* These values are the size of the type that will be used in a system
>> + call. They are obtained from Linux Kernel source. */
>> +static void
>> +riscv64_linux_record_tdep_init (
>> + struct gdbarch *gdbarch, struct linux_record_tdep &riscv_linux_record_tdep)
>
> Oops, also missed this one on the first pass.
>
> The preferred way to do multi-line arguments is:
>
> static void
> riscv64_linux_record_tdep_init (struct gdbarch *gdbarch,
> struct
> linux_record_tdep &riscv_linux_record_tdep)
> {
>
> (with the "struct" keywords being aligned)
Addressed
>> + {
>> + gdb_assert (regcache);
>> +
>> + if (!try_read (regcache, reg, addr))
>> + {
>> + return set_error ();
>> + }
>> + return true;
>> + }
>> +
>> + bool
>> + save_reg (regnum_type regnum) noexcept
>> + {
>> + try
>> + {
>> + m_regs.emplace_back (regnum);
>
> Similar to my thoughts on Loongarch, I don't think this approach is the
> best.
>
> In short, recording is already considered very slow. The strategy this
> patch uses is to first collect all the data to be recorded (which
> demands dynamic allocations to std::vector), and then call
> record_full_arch_list_add_reg or record_full_arch_list_add_mem, which
> will do their own dynamic allocations. This seems wasteful to me.
>
> I believe it would be better if, instead, the save_reg and save_mem
> methods would directly call the correct record_full_arch_list_add
> function, so that only one allocation is needed per unit of data that
> needs recording.
>
> Since aarch64 already uses the strategy in this patch I won't block
> merging based on this feedback, if you're set on this idea, but I think
> direct calls would be better.
I think that this overhead is negligeble, since the number of allocation
because most instructions affect only 1 register. Moreover, I feel that the
suggested approach simplifies error handling, since I can decouple decoding
procedure from the actual error detection. If you don't mind, I would suggest
to leave it as it is.
>> + if (is_ebreak_insn (ival))
>> + {
>> + m_record_type = record_type::EBREAK;
>> + return true;
>> + }
>> +
>> + if (try_save_pc (ival) || try_save_pc_rd (ival) || try_save_pc_fprd (ival)
>> + || try_save_pc_rd_csr (ival) || try_save_pc_mem (ival, regcache)
>> + || try_save_pc_rd_mem (ival, regcache)
>> + || try_save_pc_rs2_rd_mem (ival, regcache))
>> + {
>> + return !has_error ();
>> + }
> Minor nit, but I noticed around here that this (and some lines later,
> maybe some before) don't need the braces.
Addressed
>> + if (!try_read (regcache, RISCV_A7_REGNUM, reg_val))
>> + {
>> + return -1;
>> + }
>> + return tdep->riscv_syscall_record (regcache, reg_val);
>> + }
>> +
>> + case riscv_recorded_insn::record_type::EBREAK:
>> + break;
>> +
>> + default:
>> + return -1;
>> + }
>> + return 0;
>> +}
>> +
>> +int
>> +riscv_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
>> + CORE_ADDR addr)
>> +{
>> + gdb_assert (gdbarch && regcache);
> null pointer checks should be explicit, ie, gdb_assert (gdbarch !=
> nullptr && regcache != nullptr)
Addressed.
Best wishes,
Timur Golubovich
---
gdb/config.lt | 1484 ++++++++++++++++++++++++++
gdb/riscv-canonicalize-syscall-gen.c | 338 ++++++
gdb/riscv-linux-tdep.c | 22 +-
gdb/riscv-tdep.c | 141 +--
4 files changed, 1888 insertions(+), 97 deletions(-)
create mode 100755 gdb/config.lt
create mode 100644 gdb/riscv-canonicalize-syscall-gen.c
--
2.34.1
Comments
Sorry about the delay reviewing, this escaped my notice when it first
came to the list.
On 12/3/24 3:30 PM, Timur wrote:
> This commit adds record full support for rv64gc instrcution.
>
> It includes changes to the following files:
> - gdb/riscv-linux-tdep.c, gdb/riscv-linux-tdep.h: adds facilities to record
> syscalls.
> - gdb/riscv-tdep.c, gdb/riscv-tdep.h: adds facilities to record execution of
> rv64gc instructions.
> - gdb/configure.tgt: adds new files for compilation.
> - gdb/testsuite/lib/gdb.exp: enables testing of full record mode for RISC-V
> targets.
> - gdb/syscalls/riscv-canonicalize-syscall-gen.py: a script to generate function
> that canonicalizes RISC-V syscall. This script can simply support for syscalls
> on rv32 system. To use this script you need to pass a path to a file with
One small nit, but I would word it as "This script can simplify support
for syscalls on rv32 and rv64 systems". The current wording sounds to me
like the script is only for rv32, which I know isn't the case.
> syscalls description from riscv-glibc (example is in the help message). The
> script produces a mapping from syscall names to gdb_syscall enum.
> - gdb/riscv-canonicalize-syscall.c: the file generated by the previous script.
The GDB style for commit message is more free form text, instead of a
changelog. However, this change is simple enough that I think this
should be fine.
>
> Timur Golubovich timurgol007@gmail.com
>
> Hi!
>
>>>> + switch (syscall)
>>>> + {
>>>> + case 0: // #define __NR_io_setup 0
>>>>
>>>> All comments should be in the form /* */, rather than //
>>>>
>>>> I would also prefer if this followed what other architectures do,
>>>> defining an enum to relate syscall numbers in a RISCV system to their
>>>> names, and then this function returning the gdb_sys enum numbers,
>>>> however I don't expect to be working on RISCV in the near future, so
>>>> feel free to ignore this comment if the other RISCV maintainers are ok
>>>> with this style. This would make it so no #define comment is necessary
>>> Decided to make a script generating function that canonicalizes RISC-V syscall.
>>> This solution will simplify adding record support for rv32 system. I also left
>>> place for corner cases in generating script as they always may exist. Also
>>> removed this #define comment from generating script.
>> I see. This makes sense.
>>
>> I would like to see this explanation on the commit message, so that it
>> is recorded why Risc-V works different to all other arches.
> Could you please double-check the commit message? I tried to make it more
> detailed. Do you think I need to provide additional information?
>
>>>> +
>>>> + if (m_length == 2)
>>>> + return record_insn_len2 (ival, regcache, gdbarch);
>>>> +
>>>> + /* 6 bytes or more. If the instruction is longer than 8 bytes, we don't
>>>> +have full instruction bits in ival. At least, such long instructions
>>>> +are not defined yet, so just ignore it. */
>>>> Again, the indentation here is incorrect. Lines should start in the same column as the number 6.
>>> Addressed
>>>
>>> Best wishes,
>>> Timur Golubovich
>>>
>>> Timur Golubovich timurgol007@gmail.com
>> As I mentioned in the first review, please add some commit message
>> explaining a bit of what your patch is doing. I would recommend
>> explaining the inspiration for how riscv-tdep handles the recording (I
>> guess aarch64) and why you changed it; plus explaining the idea behind
>> the python script.c
> Added this information to the commit message.
>
>>> /* The following value is derived from __NR_rt_sigreturn in
>>> <include/uapi/asm-generic/unistd.h> from the Linux source tree. */
>>> @@ -173,6 +178,250 @@ riscv_linux_syscall_next_pc (const frame_info_ptr &frame)
>>> return pc + 4 /* Length of the ECALL insn. */;
>>> }
>>>
>>> +/* RISC-V process record-replay constructs: syscall, signal etc. */
>>> +
>>> +static linux_record_tdep riscv_linux_record_tdep;
>>> +
>>> +/* Record all registers but PC register for process-record. */
>>> +
>>> +using regnum_type = int;
>>> +
>>> +static bool
>>> +save_registers (struct regcache *regcache, regnum_type fir, regnum_type last)
>> Please fully type the variable names (fir -> first). Even if this makes
>> you need to use multiple lines for the function, I think this makes the
>> function easier to understand in the future.
>>
>> Sorry about not mentioning this before, I missed it in my first pass.
> Addressed
>
>>> + if (syscall_gdb == gdb_sys_sigreturn || syscall_gdb == gdb_sys_rt_sigreturn)
>>> + {
>>> + if (!riscv_all_but_pc_registers_record (regcache))
>>> + return -1;
>>> + return 0;
>>> + }
>>> +
>>> + auto ret = record_linux_system_call (syscall_gdb, regcache,
>>> + &riscv_linux_record_tdep);
>>> + if (ret != 0)
>>> + return ret;
>>> +
>>> + /* Record the return value of the system call. */
>>> + if (record_full_arch_list_add_reg (regcache, RISCV_A0_REGNUM))
>>> + return -1;
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +/* Initialize the riscv64_linux_record_tdep. */
>>> +/* These values are the size of the type that will be used in a system
>>> + call. They are obtained from Linux Kernel source. */
>>> +static void
>>> +riscv64_linux_record_tdep_init (
>>> + struct gdbarch *gdbarch, struct linux_record_tdep &riscv_linux_record_tdep)
>> Oops, also missed this one on the first pass.
>>
>> The preferred way to do multi-line arguments is:
>>
>> static void
>> riscv64_linux_record_tdep_init (struct gdbarch *gdbarch,
>> struct
>> linux_record_tdep &riscv_linux_record_tdep)
>> {
>>
>> (with the "struct" keywords being aligned)
> Addressed
>
>>> + {
>>> + gdb_assert (regcache);
>>> +
>>> + if (!try_read (regcache, reg, addr))
>>> + {
>>> + return set_error ();
>>> + }
>>> + return true;
>>> + }
>>> +
>>> + bool
>>> + save_reg (regnum_type regnum) noexcept
>>> + {
>>> + try
>>> + {
>>> + m_regs.emplace_back (regnum);
>> Similar to my thoughts on Loongarch, I don't think this approach is the
>> best.
>>
>> In short, recording is already considered very slow. The strategy this
>> patch uses is to first collect all the data to be recorded (which
>> demands dynamic allocations to std::vector), and then call
>> record_full_arch_list_add_reg or record_full_arch_list_add_mem, which
>> will do their own dynamic allocations. This seems wasteful to me.
>>
>> I believe it would be better if, instead, the save_reg and save_mem
>> methods would directly call the correct record_full_arch_list_add
>> function, so that only one allocation is needed per unit of data that
>> needs recording.
>>
>> Since aarch64 already uses the strategy in this patch I won't block
>> merging based on this feedback, if you're set on this idea, but I think
>> direct calls would be better.
> I think that this overhead is negligeble, since the number of allocation
> because most instructions affect only 1 register. Moreover, I feel that the
> suggested approach simplifies error handling, since I can decouple decoding
> procedure from the actual error detection. If you don't mind, I would suggest
> to leave it as it is.
>
>>> + if (is_ebreak_insn (ival))
>>> + {
>>> + m_record_type = record_type::EBREAK;
>>> + return true;
>>> + }
>>> +
>>> + if (try_save_pc (ival) || try_save_pc_rd (ival) || try_save_pc_fprd (ival)
>>> + || try_save_pc_rd_csr (ival) || try_save_pc_mem (ival, regcache)
>>> + || try_save_pc_rd_mem (ival, regcache)
>>> + || try_save_pc_rs2_rd_mem (ival, regcache))
>>> + {
>>> + return !has_error ();
>>> + }
>> Minor nit, but I noticed around here that this (and some lines later,
>> maybe some before) don't need the braces.
> Addressed
>
>>> + if (!try_read (regcache, RISCV_A7_REGNUM, reg_val))
>>> + {
>>> + return -1;
>>> + }
>>> + return tdep->riscv_syscall_record (regcache, reg_val);
>>> + }
>>> +
>>> + case riscv_recorded_insn::record_type::EBREAK:
>>> + break;
>>> +
>>> + default:
>>> + return -1;
>>> + }
>>> + return 0;
>>> +}
>>> +
>>> +int
>>> +riscv_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
>>> + CORE_ADDR addr)
>>> +{
>>> + gdb_assert (gdbarch && regcache);
>> null pointer checks should be explicit, ie, gdb_assert (gdbarch !=
>> nullptr && regcache != nullptr)
> Addressed.
>
> Best wishes,
> Timur Golubovich
>
> ---
> gdb/config.lt | 1484 ++++++++++++++++++++++++++
> gdb/riscv-canonicalize-syscall-gen.c | 338 ++++++
> gdb/riscv-linux-tdep.c | 22 +-
> gdb/riscv-tdep.c | 141 +--
> 4 files changed, 1888 insertions(+), 97 deletions(-)
> create mode 100755 gdb/config.lt
> create mode 100644 gdb/riscv-canonicalize-syscall-gen.c
Are you sure you sent the correct diff? A couple files are missing
(riscv-linux-tdep.h, configure.tgt, gdb.exp and
riscv-canonicalize-syscall.c), and there's no mention of config.lt in
the commit message.
--
Cheers,
Guinevere Larsen
She/Her/Hers
>
> diff --git a/gdb/config.lt b/gdb/config.lt
> new file mode 100755
> index 00000000000..96851a9bfaf
> --- /dev/null
> +++ b/gdb/config.lt
> @@ -0,0 +1,1484 @@
> +#! /bin/bash
> +# Generated by configure.
> +# Run this file to recreate a libtool stub with the current configuration.
> +SHELL=${CONFIG_SHELL-/bin/bash}
> +export SHELL
> +## -------------------- ##
> +## M4sh Initialization. ##
> +## -------------------- ##
> +
> +# Be more Bourne compatible
> +DUALCASE=1; export DUALCASE # for MKS sh
> +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
> + emulate sh
> + NULLCMD=:
> + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
> + # is contrary to our usage. Disable this feature.
> + alias -g '${1+"$@"}'='"$@"'
> + setopt NO_GLOB_SUBST
> +else
> + case `(set -o) 2>/dev/null` in #(
> + *posix*) :
> + set -o posix ;; #(
> + *) :
> + ;;
> +esac
> +fi
> +
> +
> +as_nl='
> +'
> +export as_nl
> +# Printing a long string crashes Solaris 7 /usr/bin/printf.
> +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
> +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
> +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
> +# Prefer a ksh shell builtin over an external printf program on Solaris,
> +# but without wasting forks for bash or zsh.
> +if test -z "$BASH_VERSION$ZSH_VERSION" \
> + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
> + as_echo='print -r --'
> + as_echo_n='print -rn --'
> +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
> + as_echo='printf %s\n'
> + as_echo_n='printf %s'
> +else
> + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
> + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
> + as_echo_n='/usr/ucb/echo -n'
> + else
> + as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
> + as_echo_n_body='eval
> + arg=$1;
> + case $arg in #(
> + *"$as_nl"*)
> + expr "X$arg" : "X\\(.*\\)$as_nl";
> + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
> + esac;
> + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
> + '
> + export as_echo_n_body
> + as_echo_n='sh -c $as_echo_n_body as_echo'
> + fi
> + export as_echo_body
> + as_echo='sh -c $as_echo_body as_echo'
> +fi
> +
> +# The user is always right.
> +if test "${PATH_SEPARATOR+set}" != set; then
> + PATH_SEPARATOR=:
> + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
> + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
> + PATH_SEPARATOR=';'
> + }
> +fi
> +
> +
> +# IFS
> +# We need space, tab and new line, in precisely that order. Quoting is
> +# there to prevent editors from complaining about space-tab.
> +# (If _AS_PATH_WALK were called with IFS unset, it would disable word
> +# splitting by setting IFS to empty value.)
> +IFS=" "" $as_nl"
> +
> +# Find who we are. Look in the path if we contain no directory separator.
> +as_myself=
> +case $0 in #((
> + *[\\/]* ) as_myself=$0 ;;
> + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> +for as_dir in $PATH
> +do
> + IFS=$as_save_IFS
> + test -z "$as_dir" && as_dir=.
> + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
> + done
> +IFS=$as_save_IFS
> +
> + ;;
> +esac
> +# We did not find ourselves, most probably we were run as `sh COMMAND'
> +# in which case we are not to be found in the path.
> +if test "x$as_myself" = x; then
> + as_myself=$0
> +fi
> +if test ! -f "$as_myself"; then
> + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
> + exit 1
> +fi
> +
> +# Unset variables that we do not need and which cause bugs (e.g. in
> +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
> +# suppresses any "Segmentation fault" message there. '((' could
> +# trigger a bug in pdksh 5.2.14.
> +for as_var in BASH_ENV ENV MAIL MAILPATH
> +do eval test x\${$as_var+set} = xset \
> + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
> +done
> +PS1='$ '
> +PS2='> '
> +PS4='+ '
> +
> +# NLS nuisances.
> +LC_ALL=C
> +export LC_ALL
> +LANGUAGE=C
> +export LANGUAGE
> +
> +# CDPATH.
> +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
> +
> +
> +# as_fn_error STATUS ERROR [LINENO LOG_FD]
> +# ----------------------------------------
> +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
> +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
> +# script with STATUS, using 1 if that was 0.
> +as_fn_error ()
> +{
> + as_status=$1; test $as_status -eq 0 && as_status=1
> + if test "$4"; then
> + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
> + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
> + fi
> + $as_echo "$as_me: error: $2" >&2
> + as_fn_exit $as_status
> +} # as_fn_error
> +
> +
> +# as_fn_set_status STATUS
> +# -----------------------
> +# Set $? to STATUS, without forking.
> +as_fn_set_status ()
> +{
> + return $1
> +} # as_fn_set_status
> +
> +# as_fn_exit STATUS
> +# -----------------
> +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
> +as_fn_exit ()
> +{
> + set +e
> + as_fn_set_status $1
> + exit $1
> +} # as_fn_exit
> +
> +# as_fn_unset VAR
> +# ---------------
> +# Portably unset VAR.
> +as_fn_unset ()
> +{
> + { eval $1=; unset $1;}
> +}
> +as_unset=as_fn_unset
> +# as_fn_append VAR VALUE
> +# ----------------------
> +# Append the text in VALUE to the end of the definition contained in VAR. Take
> +# advantage of any shell optimizations that allow amortized linear growth over
> +# repeated appends, instead of the typical quadratic growth present in naive
> +# implementations.
> +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
> + eval 'as_fn_append ()
> + {
> + eval $1+=\$2
> + }'
> +else
> + as_fn_append ()
> + {
> + eval $1=\$$1\$2
> + }
> +fi # as_fn_append
> +
> +# as_fn_arith ARG...
> +# ------------------
> +# Perform arithmetic evaluation on the ARGs, and store the result in the
> +# global $as_val. Take advantage of shells that can avoid forks. The arguments
> +# must be portable across $(()) and expr.
> +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
> + eval 'as_fn_arith ()
> + {
> + as_val=$(( $* ))
> + }'
> +else
> + as_fn_arith ()
> + {
> + as_val=`expr "$@" || test $? -eq 1`
> + }
> +fi # as_fn_arith
> +
> +
> +if expr a : '\(a\)' >/dev/null 2>&1 &&
> + test "X`expr 00001 : '.*\(...\)'`" = X001; then
> + as_expr=expr
> +else
> + as_expr=false
> +fi
> +
> +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
> + as_basename=basename
> +else
> + as_basename=false
> +fi
> +
> +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
> + as_dirname=dirname
> +else
> + as_dirname=false
> +fi
> +
> +as_me=`$as_basename -- "$0" ||
> +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
> + X"$0" : 'X\(//\)$' \| \
> + X"$0" : 'X\(/\)' \| . 2>/dev/null ||
> +$as_echo X/"$0" |
> + sed '/^.*\/\([^/][^/]*\)\/*$/{
> + s//\1/
> + q
> + }
> + /^X\/\(\/\/\)$/{
> + s//\1/
> + q
> + }
> + /^X\/\(\/\).*/{
> + s//\1/
> + q
> + }
> + s/.*/./; q'`
> +
> +# Avoid depending upon Character Ranges.
> +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
> +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
> +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
> +as_cr_digits='0123456789'
> +as_cr_alnum=$as_cr_Letters$as_cr_digits
> +
> +ECHO_C= ECHO_N= ECHO_T=
> +case `echo -n x` in #(((((
> +-n*)
> + case `echo 'xy\c'` in
> + *c*) ECHO_T=' ';; # ECHO_T is single tab character.
> + xy) ECHO_C='\c';;
> + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
> + ECHO_T=' ';;
> + esac;;
> +*)
> + ECHO_N='-n';;
> +esac
> +
> +rm -f conf$$ conf$$.exe conf$$.file
> +if test -d conf$$.dir; then
> + rm -f conf$$.dir/conf$$.file
> +else
> + rm -f conf$$.dir
> + mkdir conf$$.dir 2>/dev/null
> +fi
> +if (echo >conf$$.file) 2>/dev/null; then
> + if ln -s conf$$.file conf$$ 2>/dev/null; then
> + as_ln_s='ln -s'
> + # ... but there are two gotchas:
> + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
> + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
> + # In both cases, we have to default to `cp -pR'.
> + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
> + as_ln_s='cp -pR'
> + elif ln conf$$.file conf$$ 2>/dev/null; then
> + as_ln_s=ln
> + else
> + as_ln_s='cp -pR'
> + fi
> +else
> + as_ln_s='cp -pR'
> +fi
> +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
> +rmdir conf$$.dir 2>/dev/null
> +
> +
> +# as_fn_mkdir_p
> +# -------------
> +# Create "$as_dir" as a directory, including parents if necessary.
> +as_fn_mkdir_p ()
> +{
> +
> + case $as_dir in #(
> + -*) as_dir=./$as_dir;;
> + esac
> + test -d "$as_dir" || eval $as_mkdir_p || {
> + as_dirs=
> + while :; do
> + case $as_dir in #(
> + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
> + *) as_qdir=$as_dir;;
> + esac
> + as_dirs="'$as_qdir' $as_dirs"
> + as_dir=`$as_dirname -- "$as_dir" ||
> +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
> + X"$as_dir" : 'X\(//\)[^/]' \| \
> + X"$as_dir" : 'X\(//\)$' \| \
> + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
> +$as_echo X"$as_dir" |
> + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
> + s//\1/
> + q
> + }
> + /^X\(\/\/\)[^/].*/{
> + s//\1/
> + q
> + }
> + /^X\(\/\/\)$/{
> + s//\1/
> + q
> + }
> + /^X\(\/\).*/{
> + s//\1/
> + q
> + }
> + s/.*/./; q'`
> + test -d "$as_dir" && break
> + done
> + test -z "$as_dirs" || eval "mkdir $as_dirs"
> + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
> +
> +
> +} # as_fn_mkdir_p
> +if mkdir -p . 2>/dev/null; then
> + as_mkdir_p='mkdir -p "$as_dir"'
> +else
> + test -d ./-p && rmdir ./-p
> + as_mkdir_p=false
> +fi
> +
> +
> +# as_fn_executable_p FILE
> +# -----------------------
> +# Test if FILE is an executable regular file.
> +as_fn_executable_p ()
> +{
> + test -f "$1" && test -x "$1"
> +} # as_fn_executable_p
> +as_test_x='test -x'
> +as_executable_p=as_fn_executable_p
> +
> +# Sed expression to map a string onto a valid CPP name.
> +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
> +
> +# Sed expression to map a string onto a valid variable name.
> +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
> +
> +
> +exec 6>&1
> +## --------------------------------- ##
> +## Main body of "$CONFIG_LT" script. ##
> +## --------------------------------- ##
> +lt_cl_silent=false
> +exec 5>>config.log
> +{
> + echo
> + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
> +## Running $as_me. ##
> +_ASBOX
> +} >&5
> +
> +lt_cl_help="\
> +\`$as_me' creates a local libtool stub from the current configuration,
> +for use in further configure time tests before the real libtool is
> +generated.
> +
> +Usage: $0 [OPTIONS]
> +
> + -h, --help print this help, then exit
> + -V, --version print version number, then exit
> + -q, --quiet do not print progress messages
> + -d, --debug don't remove temporary files
> +
> +Report bugs to <bug-libtool@gnu.org>."
> +
> +lt_cl_version="\
> +config.lt
> +configured by $0, generated by GNU Autoconf 2.69.
> +
> +Copyright (C) 2009 Free Software Foundation, Inc.
> +This config.lt script is free software; the Free Software Foundation
> +gives unlimited permision to copy, distribute and modify it."
> +
> +while test $# != 0
> +do
> + case $1 in
> + --version | --v* | -V )
> + echo "$lt_cl_version"; exit 0 ;;
> + --help | --h* | -h )
> + echo "$lt_cl_help"; exit 0 ;;
> + --debug | --d* | -d )
> + debug=: ;;
> + --quiet | --q* | --silent | --s* | -q )
> + lt_cl_silent=: ;;
> +
> + -*) as_fn_error $? "unrecognized option: $1
> +Try \`$0 --help' for more information." "$LINENO" 5 ;;
> +
> + *) as_fn_error $? "unrecognized argument: $1
> +Try \`$0 --help' for more information." "$LINENO" 5 ;;
> + esac
> + shift
> +done
> +
> +if $lt_cl_silent; then
> + exec 6>/dev/null
> +fi
> +
> +
> +# The HP-UX ksh and POSIX shell print the target directory to stdout
> +# if CDPATH is set.
> +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
> +
> +sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
> +double_quote_subst='s/\(["`\\]\)/\\\1/g'
> +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
> +macro_version='2.2.7a'
> +macro_revision='1.3134'
> +enable_shared='yes'
> +enable_static='yes'
> +pic_mode='default'
> +enable_fast_install='needless'
> +SHELL='/bin/bash'
> +ECHO='printf %s\n'
> +host_alias='x86_64-pc-linux-gnu'
> +host='x86_64-pc-linux-gnu'
> +host_os='linux-gnu'
> +build_alias='x86_64-pc-linux-gnu'
> +build='x86_64-pc-linux-gnu'
> +build_os='linux-gnu'
> +SED='/usr/bin/sed'
> +Xsed='/usr/bin/sed -e 1s/^X//'
> +GREP='/usr/bin/grep'
> +EGREP='/usr/bin/grep -E'
> +FGREP='/usr/bin/grep -F'
> +LD='ld -m elf_x86_64'
> +NM='/usr/bin/nm -B'
> +LN_S='ln -s'
> +max_cmd_len='1572864'
> +ac_objext='o'
> +exeext=''
> +lt_unset='unset'
> +lt_SP2NL='tr \040 \012'
> +lt_NL2SP='tr \015\012 \040\040'
> +reload_flag=' -r'
> +reload_cmds='$LD$reload_flag -o $output$reload_objs'
> +OBJDUMP='objdump'
> +deplibs_check_method='pass_all'
> +file_magic_cmd='$MAGIC_CMD'
> +AR='ar --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so'
> +AR_FLAGS='rc'
> +STRIP='strip'
> +RANLIB='ranlib --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so'
> +old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib'
> +old_postuninstall_cmds=''
> +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib'
> +lock_old_archive_extraction='no'
> +CC='gcc'
> +CFLAGS='-g -O2 '
> +compiler='g++'
> +GCC='yes'
> +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'''
> +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
> +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\'''
> +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\'''
> +objdir='.libs'
> +MAGIC_CMD='file'
> +lt_prog_compiler_no_builtin_flag=' -fno-builtin'
> +lt_prog_compiler_wl='-Wl,'
> +lt_prog_compiler_pic=' -fPIC -DPIC'
> +lt_prog_compiler_static='-static'
> +lt_cv_prog_compiler_c_o='yes'
> +need_locks='no'
> +DSYMUTIL='dsymutil'
> +NMEDIT=''
> +LIPO='lipo'
> +OTOOL='otool'
> +OTOOL64=''
> +libext='a'
> +shrext_cmds='.so'
> +extract_expsyms_cmds=''
> +archive_cmds_need_lc='no'
> +enable_shared_with_static_runtimes='no'
> +export_dynamic_flag_spec='${wl}--export-dynamic'
> +whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
> +compiler_needs_object='no'
> +old_archive_from_new_cmds=''
> +old_archive_from_expsyms_cmds=''
> +archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
> +archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
> + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
> + echo "local: *; };" >> $output_objdir/$libname.ver~
> + $CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
> +module_cmds=''
> +module_expsym_cmds=''
> +with_gnu_ld='yes'
> +allow_undefined_flag=''
> +no_undefined_flag=''
> +hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
> +hardcode_libdir_flag_spec_ld=''
> +hardcode_libdir_separator=''
> +hardcode_direct='no'
> +hardcode_direct_absolute='no'
> +hardcode_minus_L='no'
> +hardcode_shlibpath_var='unsupported'
> +hardcode_automatic='no'
> +inherit_rpath='no'
> +link_all_deplibs='unknown'
> +fix_srcfile_path=''
> +always_export_symbols='no'
> +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
> +exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
> +include_expsyms=''
> +prelink_cmds=''
> +file_list_spec=''
> +variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH'
> +need_lib_prefix='no'
> +need_version='no'
> +version_type='linux'
> +runpath_var='LD_RUN_PATH'
> +shlibpath_var='LD_LIBRARY_PATH'
> +shlibpath_overrides_runpath='yes'
> +libname_spec='lib$name'
> +library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
> +soname_spec='${libname}${release}${shared_ext}$major'
> +install_override_mode=''
> +postinstall_cmds=''
> +postuninstall_cmds=''
> +finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
> +finish_eval=''
> +hardcode_into_libs='yes'
> +sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/11 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib '
> +sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /usr/local/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib32 /usr/lib32 '
> +hardcode_action='immediate'
> +enable_dlopen='unknown'
> +enable_dlopen_self='unknown'
> +enable_dlopen_self_static='unknown'
> +old_striplib='strip --strip-debug'
> +striplib='strip --strip-unneeded'
> +compiler_lib_search_dirs=''
> +predep_objects=''
> +postdep_objects=''
> +predeps=''
> +postdeps=''
> +compiler_lib_search_path=''
> +LD_CXX='ld -m elf_x86_64'
> +reload_flag_CXX=' -r'
> +reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs'
> +old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib'
> +compiler_CXX='g++'
> +GCC_CXX='yes'
> +lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
> +lt_prog_compiler_wl_CXX='-Wl,'
> +lt_prog_compiler_pic_CXX=' -fPIC -DPIC'
> +lt_prog_compiler_static_CXX='-static'
> +lt_cv_prog_compiler_c_o_CXX='yes'
> +archive_cmds_need_lc_CXX='no'
> +enable_shared_with_static_runtimes_CXX='no'
> +export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
> +whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
> +compiler_needs_object_CXX='no'
> +old_archive_from_new_cmds_CXX=''
> +old_archive_from_expsyms_cmds_CXX=''
> +archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
> +archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
> +module_cmds_CXX=''
> +module_expsym_cmds_CXX=''
> +with_gnu_ld_CXX='yes'
> +allow_undefined_flag_CXX=''
> +no_undefined_flag_CXX=''
> +hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
> +hardcode_libdir_flag_spec_ld_CXX=''
> +hardcode_libdir_separator_CXX=''
> +hardcode_direct_CXX='no'
> +hardcode_direct_absolute_CXX='no'
> +hardcode_minus_L_CXX='no'
> +hardcode_shlibpath_var_CXX='unsupported'
> +hardcode_automatic_CXX='no'
> +inherit_rpath_CXX='no'
> +link_all_deplibs_CXX='unknown'
> +fix_srcfile_path_CXX=''
> +always_export_symbols_CXX='no'
> +export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
> +exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
> +include_expsyms_CXX=''
> +prelink_cmds_CXX=''
> +file_list_spec_CXX=''
> +hardcode_action_CXX='immediate'
> +compiler_lib_search_dirs_CXX='/usr/lib/gcc/x86_64-linux-gnu/11 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/11/../../..'
> +predep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o'
> +postdep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o'
> +predeps_CXX=''
> +postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s'
> +compiler_lib_search_path_CXX='-L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../..'
> +
> +LTCC='gcc'
> +LTCFLAGS='-g -O2 '
> +compiler='gcc'
> +
> +# A function that is used when there is no print builtin or printf.
> +func_fallback_echo ()
> +{
> + eval 'cat <<_LTECHO_EOF
> +$1
> +_LTECHO_EOF'
> +}
> +
> +# Quote evaled strings.
> +for var in SHELL ECHO SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd AR AR_FLAGS STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_prog_compiler_no_builtin_flag lt_prog_compiler_wl lt_prog_compiler_pic lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator fix_srcfile_path exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_flag_spec_ld_CXX hardcode_libdir_separator_CXX fix_srcfile_path_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do
> + case `eval \\$ECHO \\""\\$$var"\\"` in
> + *[\\\`\"\$]*)
> + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\""
> + ;;
> + *)
> + eval "lt_$var=\\\"\$$var\\\""
> + ;;
> + esac
> +done
> +
> +# Double-quote double-evaled strings.
> +for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX; do
> + case `eval \\$ECHO \\""\\$$var"\\"` in
> + *[\\\`\"\$]*)
> + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
> + ;;
> + *)
> + eval "lt_$var=\\\"\$$var\\\""
> + ;;
> + esac
> +done
> +
> +ac_aux_dir='..'
> +xsi_shell='yes'
> +lt_shell_append='yes'
> +
> +# See if we are running on zsh, and set the options which allow our
> +# commands through without removal of \ escapes INIT.
> +if test -n "${ZSH_VERSION+set}" ; then
> + setopt NO_GLOB_SUBST
> +fi
> +
> +
> + PACKAGE=''
> + VERSION=''
> + TIMESTAMP=''
> + RM='rm -f'
> + ofile='libtool'
> +
> +
> +
> +
> +
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5
> +$as_echo "$as_me: creating $ofile" >&6;}
> +
> +
> + # See if we are running on zsh, and set the options which allow our
> + # commands through without removal of \ escapes.
> + if test -n "${ZSH_VERSION+set}" ; then
> + setopt NO_GLOB_SUBST
> + fi
> +
> + cfgfile="${ofile}T"
> + trap "$RM \"$cfgfile\"; exit 1" 1 2 15
> + $RM "$cfgfile"
> +
> + cat <<_LT_EOF >> "$cfgfile"
> +#! $SHELL
> +
> +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
> +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
> +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
> +# NOTE: Changes made to this file will be lost: look at ltmain.sh.
> +#
> +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
> +# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
> +# Written by Gordon Matzigkeit, 1996
> +#
> +# This file is part of GNU Libtool.
> +#
> +# GNU Libtool 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 2 of
> +# the License, or (at your option) any later version.
> +#
> +# As a special exception to the GNU General Public License,
> +# if you distribute this file as part of a program or library that
> +# is built using GNU Libtool, you may include this file under the
> +# same distribution terms that you use for the rest of that program.
> +#
> +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
> +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
> +# obtained by writing to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> +
> +
> +# The names of the tagged configurations supported by this script.
> +available_tags="CXX "
> +
> +# ### BEGIN LIBTOOL CONFIG
> +
> +# Which release of libtool.m4 was used?
> +macro_version=$macro_version
> +macro_revision=$macro_revision
> +
> +# Whether or not to build shared libraries.
> +build_libtool_libs=$enable_shared
> +
> +# Whether or not to build static libraries.
> +build_old_libs=$enable_static
> +
> +# What type of objects to build.
> +pic_mode=$pic_mode
> +
> +# Whether or not to optimize for fast installation.
> +fast_install=$enable_fast_install
> +
> +# Shell to use when invoking shell scripts.
> +SHELL=$lt_SHELL
> +
> +# An echo program that protects backslashes.
> +ECHO=$lt_ECHO
> +
> +# The host system.
> +host_alias=$host_alias
> +host=$host
> +host_os=$host_os
> +
> +# The build system.
> +build_alias=$build_alias
> +build=$build
> +build_os=$build_os
> +
> +# A sed program that does not truncate output.
> +SED=$lt_SED
> +
> +# Sed that helps us avoid accidentally triggering echo(1) options like -n.
> +Xsed="\$SED -e 1s/^X//"
> +
> +# A grep program that handles long lines.
> +GREP=$lt_GREP
> +
> +# An ERE matcher.
> +EGREP=$lt_EGREP
> +
> +# A literal string matcher.
> +FGREP=$lt_FGREP
> +
> +# A BSD- or MS-compatible name lister.
> +NM=$lt_NM
> +
> +# Whether we need soft or hard links.
> +LN_S=$lt_LN_S
> +
> +# What is the maximum length of a command?
> +max_cmd_len=$max_cmd_len
> +
> +# Object file suffix (normally "o").
> +objext=$ac_objext
> +
> +# Executable file suffix (normally "").
> +exeext=$exeext
> +
> +# whether the shell understands "unset".
> +lt_unset=$lt_unset
> +
> +# turn spaces into newlines.
> +SP2NL=$lt_lt_SP2NL
> +
> +# turn newlines into spaces.
> +NL2SP=$lt_lt_NL2SP
> +
> +# An object symbol dumper.
> +OBJDUMP=$lt_OBJDUMP
> +
> +# Method to check whether dependent libraries are shared objects.
> +deplibs_check_method=$lt_deplibs_check_method
> +
> +# Command to use when deplibs_check_method == "file_magic".
> +file_magic_cmd=$lt_file_magic_cmd
> +
> +# The archiver.
> +AR=$lt_AR
> +AR_FLAGS=$lt_AR_FLAGS
> +
> +# A symbol stripping program.
> +STRIP=$lt_STRIP
> +
> +# Commands used to install an old-style archive.
> +RANLIB=$lt_RANLIB
> +old_postinstall_cmds=$lt_old_postinstall_cmds
> +old_postuninstall_cmds=$lt_old_postuninstall_cmds
> +
> +# Whether to use a lock for old archive extraction.
> +lock_old_archive_extraction=$lock_old_archive_extraction
> +
> +# A C compiler.
> +LTCC=$lt_CC
> +
> +# LTCC compiler flags.
> +LTCFLAGS=$lt_CFLAGS
> +
> +# Take the output of nm and produce a listing of raw symbols and C names.
> +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
> +
> +# Transform the output of nm in a proper C declaration.
> +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
> +
> +# Transform the output of nm in a C name address pair.
> +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
> +
> +# Transform the output of nm in a C name address pair when lib prefix is needed.
> +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
> +
> +# The name of the directory that contains temporary libtool files.
> +objdir=$objdir
> +
> +# Used to examine libraries when file_magic_cmd begins with "file".
> +MAGIC_CMD=$MAGIC_CMD
> +
> +# Must we lock files when doing compilation?
> +need_locks=$lt_need_locks
> +
> +# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
> +DSYMUTIL=$lt_DSYMUTIL
> +
> +# Tool to change global to local symbols on Mac OS X.
> +NMEDIT=$lt_NMEDIT
> +
> +# Tool to manipulate fat objects and archives on Mac OS X.
> +LIPO=$lt_LIPO
> +
> +# ldd/readelf like tool for Mach-O binaries on Mac OS X.
> +OTOOL=$lt_OTOOL
> +
> +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
> +OTOOL64=$lt_OTOOL64
> +
> +# Old archive suffix (normally "a").
> +libext=$libext
> +
> +# Shared library suffix (normally ".so").
> +shrext_cmds=$lt_shrext_cmds
> +
> +# The commands to extract the exported symbol list from a shared archive.
> +extract_expsyms_cmds=$lt_extract_expsyms_cmds
> +
> +# Variables whose values should be saved in libtool wrapper scripts and
> +# restored at link time.
> +variables_saved_for_relink=$lt_variables_saved_for_relink
> +
> +# Do we need the "lib" prefix for modules?
> +need_lib_prefix=$need_lib_prefix
> +
> +# Do we need a version for libraries?
> +need_version=$need_version
> +
> +# Library versioning type.
> +version_type=$version_type
> +
> +# Shared library runtime path variable.
> +runpath_var=$runpath_var
> +
> +# Shared library path variable.
> +shlibpath_var=$shlibpath_var
> +
> +# Is shlibpath searched before the hard-coded library search path?
> +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
> +
> +# Format of library name prefix.
> +libname_spec=$lt_libname_spec
> +
> +# List of archive names. First name is the real one, the rest are links.
> +# The last name is the one that the linker finds with -lNAME
> +library_names_spec=$lt_library_names_spec
> +
> +# The coded name of the library, if different from the real name.
> +soname_spec=$lt_soname_spec
> +
> +# Permission mode override for installation of shared libraries.
> +install_override_mode=$lt_install_override_mode
> +
> +# Command to use after installation of a shared archive.
> +postinstall_cmds=$lt_postinstall_cmds
> +
> +# Command to use after uninstallation of a shared archive.
> +postuninstall_cmds=$lt_postuninstall_cmds
> +
> +# Commands used to finish a libtool library installation in a directory.
> +finish_cmds=$lt_finish_cmds
> +
> +# As "finish_cmds", except a single script fragment to be evaled but
> +# not shown.
> +finish_eval=$lt_finish_eval
> +
> +# Whether we should hardcode library paths into libraries.
> +hardcode_into_libs=$hardcode_into_libs
> +
> +# Compile-time system search path for libraries.
> +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
> +
> +# Run-time system search path for libraries.
> +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
> +
> +# Whether dlopen is supported.
> +dlopen_support=$enable_dlopen
> +
> +# Whether dlopen of programs is supported.
> +dlopen_self=$enable_dlopen_self
> +
> +# Whether dlopen of statically linked programs is supported.
> +dlopen_self_static=$enable_dlopen_self_static
> +
> +# Commands to strip libraries.
> +old_striplib=$lt_old_striplib
> +striplib=$lt_striplib
> +
> +
> +# The linker used to build libraries.
> +LD=$lt_LD
> +
> +# How to create reloadable object files.
> +reload_flag=$lt_reload_flag
> +reload_cmds=$lt_reload_cmds
> +
> +# Commands used to build an old-style archive.
> +old_archive_cmds=$lt_old_archive_cmds
> +
> +# A language specific compiler.
> +CC=$lt_compiler
> +
> +# Is the compiler the GNU compiler?
> +with_gcc=$GCC
> +
> +# Compiler flag to turn off builtin functions.
> +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
> +
> +# How to pass a linker flag through the compiler.
> +wl=$lt_lt_prog_compiler_wl
> +
> +# Additional compiler flags for building library objects.
> +pic_flag=$lt_lt_prog_compiler_pic
> +
> +# Compiler flag to prevent dynamic linking.
> +link_static_flag=$lt_lt_prog_compiler_static
> +
> +# Does compiler simultaneously support -c and -o options?
> +compiler_c_o=$lt_lt_cv_prog_compiler_c_o
> +
> +# Whether or not to add -lc for building shared libraries.
> +build_libtool_need_lc=$archive_cmds_need_lc
> +
> +# Whether or not to disallow shared libs when runtime libs are static.
> +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
> +
> +# Compiler flag to allow reflexive dlopens.
> +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
> +
> +# Compiler flag to generate shared objects directly from archives.
> +whole_archive_flag_spec=$lt_whole_archive_flag_spec
> +
> +# Whether the compiler copes with passing no objects directly.
> +compiler_needs_object=$lt_compiler_needs_object
> +
> +# Create an old-style archive from a shared archive.
> +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
> +
> +# Create a temporary old-style archive to link instead of a shared archive.
> +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
> +
> +# Commands used to build a shared archive.
> +archive_cmds=$lt_archive_cmds
> +archive_expsym_cmds=$lt_archive_expsym_cmds
> +
> +# Commands used to build a loadable module if different from building
> +# a shared archive.
> +module_cmds=$lt_module_cmds
> +module_expsym_cmds=$lt_module_expsym_cmds
> +
> +# Whether we are building with GNU ld or not.
> +with_gnu_ld=$lt_with_gnu_ld
> +
> +# Flag that allows shared libraries with undefined symbols to be built.
> +allow_undefined_flag=$lt_allow_undefined_flag
> +
> +# Flag that enforces no undefined symbols.
> +no_undefined_flag=$lt_no_undefined_flag
> +
> +# Flag to hardcode \$libdir into a binary during linking.
> +# This must work even if \$libdir does not exist
> +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
> +
> +# If ld is used when linking, flag to hardcode \$libdir into a binary
> +# during linking. This must work even if \$libdir does not exist.
> +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
> +
> +# Whether we need a single "-rpath" flag with a separated argument.
> +hardcode_libdir_separator=$lt_hardcode_libdir_separator
> +
> +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
> +# DIR into the resulting binary.
> +hardcode_direct=$hardcode_direct
> +
> +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
> +# DIR into the resulting binary and the resulting library dependency is
> +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
> +# library is relocated.
> +hardcode_direct_absolute=$hardcode_direct_absolute
> +
> +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
> +# into the resulting binary.
> +hardcode_minus_L=$hardcode_minus_L
> +
> +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
> +# into the resulting binary.
> +hardcode_shlibpath_var=$hardcode_shlibpath_var
> +
> +# Set to "yes" if building a shared library automatically hardcodes DIR
> +# into the library and all subsequent libraries and executables linked
> +# against it.
> +hardcode_automatic=$hardcode_automatic
> +
> +# Set to yes if linker adds runtime paths of dependent libraries
> +# to runtime path list.
> +inherit_rpath=$inherit_rpath
> +
> +# Whether libtool must link a program against all its dependency libraries.
> +link_all_deplibs=$link_all_deplibs
> +
> +# Fix the shell variable \$srcfile for the compiler.
> +fix_srcfile_path=$lt_fix_srcfile_path
> +
> +# Set to "yes" if exported symbols are required.
> +always_export_symbols=$always_export_symbols
> +
> +# The commands to list exported symbols.
> +export_symbols_cmds=$lt_export_symbols_cmds
> +
> +# Symbols that should not be listed in the preloaded symbols.
> +exclude_expsyms=$lt_exclude_expsyms
> +
> +# Symbols that must always be exported.
> +include_expsyms=$lt_include_expsyms
> +
> +# Commands necessary for linking programs (against libraries) with templates.
> +prelink_cmds=$lt_prelink_cmds
> +
> +# Specify filename containing input files.
> +file_list_spec=$lt_file_list_spec
> +
> +# How to hardcode a shared library path into an executable.
> +hardcode_action=$hardcode_action
> +
> +# The directories searched by this compiler when creating a shared library.
> +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
> +
> +# Dependencies to place before and after the objects being linked to
> +# create a shared library.
> +predep_objects=$lt_predep_objects
> +postdep_objects=$lt_postdep_objects
> +predeps=$lt_predeps
> +postdeps=$lt_postdeps
> +
> +# The library search path used internally by the compiler when linking
> +# a shared library.
> +compiler_lib_search_path=$lt_compiler_lib_search_path
> +
> +# ### END LIBTOOL CONFIG
> +
> +_LT_EOF
> +
> + case $host_os in
> + aix3*)
> + cat <<\_LT_EOF >> "$cfgfile"
> +# AIX sometimes has problems with the GCC collect2 program. For some
> +# reason, if we set the COLLECT_NAMES environment variable, the problems
> +# vanish in a puff of smoke.
> +if test "X${COLLECT_NAMES+set}" != Xset; then
> + COLLECT_NAMES=
> + export COLLECT_NAMES
> +fi
> +_LT_EOF
> + ;;
> + esac
> +
> +
> +ltmain="$ac_aux_dir/ltmain.sh"
> +
> +
> + # We use sed instead of cat because bash on DJGPP gets confused if
> + # if finds mixed CR/LF and LF-only lines. Since sed operates in
> + # text mode, it properly converts lines to CR/LF. This bash problem
> + # is reportedly fixed, but why not run on old versions too?
> + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
> + || (rm -f "$cfgfile"; exit 1)
> +
> + case $xsi_shell in
> + yes)
> + cat << \_LT_EOF >> "$cfgfile"
> +
> +# func_dirname file append nondir_replacement
> +# Compute the dirname of FILE. If nonempty, add APPEND to the result,
> +# otherwise set result to NONDIR_REPLACEMENT.
> +func_dirname ()
> +{
> + case ${1} in
> + */*) func_dirname_result="${1%/*}${2}" ;;
> + * ) func_dirname_result="${3}" ;;
> + esac
> +}
> +
> +# func_basename file
> +func_basename ()
> +{
> + func_basename_result="${1##*/}"
> +}
> +
> +# func_dirname_and_basename file append nondir_replacement
> +# perform func_basename and func_dirname in a single function
> +# call:
> +# dirname: Compute the dirname of FILE. If nonempty,
> +# add APPEND to the result, otherwise set result
> +# to NONDIR_REPLACEMENT.
> +# value returned in "$func_dirname_result"
> +# basename: Compute filename of FILE.
> +# value retuned in "$func_basename_result"
> +# Implementation must be kept synchronized with func_dirname
> +# and func_basename. For efficiency, we do not delegate to
> +# those functions but instead duplicate the functionality here.
> +func_dirname_and_basename ()
> +{
> + case ${1} in
> + */*) func_dirname_result="${1%/*}${2}" ;;
> + * ) func_dirname_result="${3}" ;;
> + esac
> + func_basename_result="${1##*/}"
> +}
> +
> +# func_stripname prefix suffix name
> +# strip PREFIX and SUFFIX off of NAME.
> +# PREFIX and SUFFIX must not contain globbing or regex special
> +# characters, hashes, percent signs, but SUFFIX may contain a leading
> +# dot (in which case that matches only a dot).
> +func_stripname ()
> +{
> + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
> + # positional parameters, so assign one to ordinary parameter first.
> + func_stripname_result=${3}
> + func_stripname_result=${func_stripname_result#"${1}"}
> + func_stripname_result=${func_stripname_result%"${2}"}
> +}
> +
> +# func_opt_split
> +func_opt_split ()
> +{
> + func_opt_split_opt=${1%%=*}
> + func_opt_split_arg=${1#*=}
> +}
> +
> +# func_lo2o object
> +func_lo2o ()
> +{
> + case ${1} in
> + *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
> + *) func_lo2o_result=${1} ;;
> + esac
> +}
> +
> +# func_xform libobj-or-source
> +func_xform ()
> +{
> + func_xform_result=${1%.*}.lo
> +}
> +
> +# func_arith arithmetic-term...
> +func_arith ()
> +{
> + func_arith_result=$(( $* ))
> +}
> +
> +# func_len string
> +# STRING may not start with a hyphen.
> +func_len ()
> +{
> + func_len_result=${#1}
> +}
> +
> +_LT_EOF
> + ;;
> + *) # Bourne compatible functions.
> + cat << \_LT_EOF >> "$cfgfile"
> +
> +# func_dirname file append nondir_replacement
> +# Compute the dirname of FILE. If nonempty, add APPEND to the result,
> +# otherwise set result to NONDIR_REPLACEMENT.
> +func_dirname ()
> +{
> + # Extract subdirectory from the argument.
> + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
> + if test "X$func_dirname_result" = "X${1}"; then
> + func_dirname_result="${3}"
> + else
> + func_dirname_result="$func_dirname_result${2}"
> + fi
> +}
> +
> +# func_basename file
> +func_basename ()
> +{
> + func_basename_result=`$ECHO "${1}" | $SED "$basename"`
> +}
> +
> +
> +# func_stripname prefix suffix name
> +# strip PREFIX and SUFFIX off of NAME.
> +# PREFIX and SUFFIX must not contain globbing or regex special
> +# characters, hashes, percent signs, but SUFFIX may contain a leading
> +# dot (in which case that matches only a dot).
> +# func_strip_suffix prefix name
> +func_stripname ()
> +{
> + case ${2} in
> + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
> + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
> + esac
> +}
> +
> +# sed scripts:
> +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
> +my_sed_long_arg='1s/^-[^=]*=//'
> +
> +# func_opt_split
> +func_opt_split ()
> +{
> + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
> + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
> +}
> +
> +# func_lo2o object
> +func_lo2o ()
> +{
> + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
> +}
> +
> +# func_xform libobj-or-source
> +func_xform ()
> +{
> + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
> +}
> +
> +# func_arith arithmetic-term...
> +func_arith ()
> +{
> + func_arith_result=`expr "$@"`
> +}
> +
> +# func_len string
> +# STRING may not start with a hyphen.
> +func_len ()
> +{
> + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
> +}
> +
> +_LT_EOF
> +esac
> +
> +case $lt_shell_append in
> + yes)
> + cat << \_LT_EOF >> "$cfgfile"
> +
> +# func_append var value
> +# Append VALUE to the end of shell variable VAR.
> +func_append ()
> +{
> + eval "$1+=\$2"
> +}
> +_LT_EOF
> + ;;
> + *)
> + cat << \_LT_EOF >> "$cfgfile"
> +
> +# func_append var value
> +# Append VALUE to the end of shell variable VAR.
> +func_append ()
> +{
> + eval "$1=\$$1\$2"
> +}
> +
> +_LT_EOF
> + ;;
> + esac
> +
> +
> + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
> + || (rm -f "$cfgfile"; exit 1)
> +
> + mv -f "$cfgfile" "$ofile" ||
> + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
> + chmod +x "$ofile"
> +
> +
> + cat <<_LT_EOF >> "$ofile"
> +
> +# ### BEGIN LIBTOOL TAG CONFIG: CXX
> +
> +# The linker used to build libraries.
> +LD=$lt_LD_CXX
> +
> +# How to create reloadable object files.
> +reload_flag=$lt_reload_flag_CXX
> +reload_cmds=$lt_reload_cmds_CXX
> +
> +# Commands used to build an old-style archive.
> +old_archive_cmds=$lt_old_archive_cmds_CXX
> +
> +# A language specific compiler.
> +CC=$lt_compiler_CXX
> +
> +# Is the compiler the GNU compiler?
> +with_gcc=$GCC_CXX
> +
> +# Compiler flag to turn off builtin functions.
> +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
> +
> +# How to pass a linker flag through the compiler.
> +wl=$lt_lt_prog_compiler_wl_CXX
> +
> +# Additional compiler flags for building library objects.
> +pic_flag=$lt_lt_prog_compiler_pic_CXX
> +
> +# Compiler flag to prevent dynamic linking.
> +link_static_flag=$lt_lt_prog_compiler_static_CXX
> +
> +# Does compiler simultaneously support -c and -o options?
> +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
> +
> +# Whether or not to add -lc for building shared libraries.
> +build_libtool_need_lc=$archive_cmds_need_lc_CXX
> +
> +# Whether or not to disallow shared libs when runtime libs are static.
> +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
> +
> +# Compiler flag to allow reflexive dlopens.
> +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
> +
> +# Compiler flag to generate shared objects directly from archives.
> +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
> +
> +# Whether the compiler copes with passing no objects directly.
> +compiler_needs_object=$lt_compiler_needs_object_CXX
> +
> +# Create an old-style archive from a shared archive.
> +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
> +
> +# Create a temporary old-style archive to link instead of a shared archive.
> +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
> +
> +# Commands used to build a shared archive.
> +archive_cmds=$lt_archive_cmds_CXX
> +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
> +
> +# Commands used to build a loadable module if different from building
> +# a shared archive.
> +module_cmds=$lt_module_cmds_CXX
> +module_expsym_cmds=$lt_module_expsym_cmds_CXX
> +
> +# Whether we are building with GNU ld or not.
> +with_gnu_ld=$lt_with_gnu_ld_CXX
> +
> +# Flag that allows shared libraries with undefined symbols to be built.
> +allow_undefined_flag=$lt_allow_undefined_flag_CXX
> +
> +# Flag that enforces no undefined symbols.
> +no_undefined_flag=$lt_no_undefined_flag_CXX
> +
> +# Flag to hardcode \$libdir into a binary during linking.
> +# This must work even if \$libdir does not exist
> +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
> +
> +# If ld is used when linking, flag to hardcode \$libdir into a binary
> +# during linking. This must work even if \$libdir does not exist.
> +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
> +
> +# Whether we need a single "-rpath" flag with a separated argument.
> +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
> +
> +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
> +# DIR into the resulting binary.
> +hardcode_direct=$hardcode_direct_CXX
> +
> +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
> +# DIR into the resulting binary and the resulting library dependency is
> +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
> +# library is relocated.
> +hardcode_direct_absolute=$hardcode_direct_absolute_CXX
> +
> +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
> +# into the resulting binary.
> +hardcode_minus_L=$hardcode_minus_L_CXX
> +
> +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
> +# into the resulting binary.
> +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
> +
> +# Set to "yes" if building a shared library automatically hardcodes DIR
> +# into the library and all subsequent libraries and executables linked
> +# against it.
> +hardcode_automatic=$hardcode_automatic_CXX
> +
> +# Set to yes if linker adds runtime paths of dependent libraries
> +# to runtime path list.
> +inherit_rpath=$inherit_rpath_CXX
> +
> +# Whether libtool must link a program against all its dependency libraries.
> +link_all_deplibs=$link_all_deplibs_CXX
> +
> +# Fix the shell variable \$srcfile for the compiler.
> +fix_srcfile_path=$lt_fix_srcfile_path_CXX
> +
> +# Set to "yes" if exported symbols are required.
> +always_export_symbols=$always_export_symbols_CXX
> +
> +# The commands to list exported symbols.
> +export_symbols_cmds=$lt_export_symbols_cmds_CXX
> +
> +# Symbols that should not be listed in the preloaded symbols.
> +exclude_expsyms=$lt_exclude_expsyms_CXX
> +
> +# Symbols that must always be exported.
> +include_expsyms=$lt_include_expsyms_CXX
> +
> +# Commands necessary for linking programs (against libraries) with templates.
> +prelink_cmds=$lt_prelink_cmds_CXX
> +
> +# Specify filename containing input files.
> +file_list_spec=$lt_file_list_spec_CXX
> +
> +# How to hardcode a shared library path into an executable.
> +hardcode_action=$hardcode_action_CXX
> +
> +# The directories searched by this compiler when creating a shared library.
> +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
> +
> +# Dependencies to place before and after the objects being linked to
> +# create a shared library.
> +predep_objects=$lt_predep_objects_CXX
> +postdep_objects=$lt_postdep_objects_CXX
> +predeps=$lt_predeps_CXX
> +postdeps=$lt_postdeps_CXX
> +
> +# The library search path used internally by the compiler when linking
> +# a shared library.
> +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
> +
> +# ### END LIBTOOL TAG CONFIG: CXX
> +_LT_EOF
> +
> +
> +as_fn_exit 0
> diff --git a/gdb/riscv-canonicalize-syscall-gen.c b/gdb/riscv-canonicalize-syscall-gen.c
> new file mode 100644
> index 00000000000..60d80aae0a6
> --- /dev/null
> +++ b/gdb/riscv-canonicalize-syscall-gen.c
> @@ -0,0 +1,338 @@
> +/* DO NOT EDIT: Autogenerated by riscv-canonicalize-syscall-gen.py
> +
> + Copyright (C) 2024 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/>. */
> +
> +#include "defs.h"
> +#include "riscv-linux-tdep.h"
> +
> +enum gdb_syscall
> +riscv64_canonicalize_syscall (int syscall)
> +{
> + switch (syscall)
> + {
> + case 0: return gdb_sys_io_setup;
> + case 1: return gdb_sys_io_destroy;
> + case 2: return gdb_sys_io_submit;
> + case 3: return gdb_sys_io_cancel;
> + case 4: return gdb_sys_io_getevents;
> + case 5: return gdb_sys_setxattr;
> + case 6: return gdb_sys_lsetxattr;
> + case 7: return gdb_sys_fsetxattr;
> + case 8: return gdb_sys_getxattr;
> + case 9: return gdb_sys_lgetxattr;
> + case 10: return gdb_sys_fgetxattr;
> + case 11: return gdb_sys_listxattr;
> + case 12: return gdb_sys_llistxattr;
> + case 13: return gdb_sys_flistxattr;
> + case 14: return gdb_sys_removexattr;
> + case 15: return gdb_sys_lremovexattr;
> + case 16: return gdb_sys_fremovexattr;
> + case 17: return gdb_sys_getcwd;
> + case 18: return gdb_sys_lookup_dcookie;
> + case 19: return gdb_sys_eventfd2;
> + case 20: return gdb_sys_epoll_create1;
> + case 21: return gdb_sys_epoll_ctl;
> + case 22: return gdb_sys_epoll_pwait;
> + case 23: return gdb_sys_dup;
> + case 24: return gdb_sys_dup3;
> + case 25: return gdb_sys_fcntl;
> + case 26: return gdb_sys_inotify_init1;
> + case 27: return gdb_sys_inotify_add_watch;
> + case 28: return gdb_sys_inotify_rm_watch;
> + case 29: return gdb_sys_ioctl;
> + case 30: return gdb_sys_ioprio_set;
> + case 31: return gdb_sys_ioprio_get;
> + case 32: return gdb_sys_flock;
> + case 33: return gdb_sys_mknodat;
> + case 34: return gdb_sys_mkdirat;
> + case 35: return gdb_sys_unlinkat;
> + case 36: return gdb_sys_symlinkat;
> + case 37: return gdb_sys_linkat;
> + /* case 39: return gdb_sys_umount2; */
> + case 40: return gdb_sys_mount;
> + case 41: return gdb_sys_pivot_root;
> + case 42: return gdb_sys_nfsservctl;
> + case 43: return gdb_sys_statfs;
> + case 44: return gdb_sys_fstatfs;
> + case 45: return gdb_sys_truncate;
> + case 46: return gdb_sys_ftruncate;
> + case 47: return gdb_sys_fallocate;
> + case 48: return gdb_sys_faccessat;
> + case 49: return gdb_sys_chdir;
> + case 50: return gdb_sys_fchdir;
> + case 51: return gdb_sys_chroot;
> + case 52: return gdb_sys_fchmod;
> + case 53: return gdb_sys_fchmodat;
> + case 54: return gdb_sys_fchownat;
> + case 55: return gdb_sys_fchown;
> + case 56: return gdb_sys_openat;
> + case 57: return gdb_sys_close;
> + case 58: return gdb_sys_vhangup;
> + case 59: return gdb_sys_pipe2;
> + case 60: return gdb_sys_quotactl;
> + case 61: return gdb_sys_getdents64;
> + case 62: return gdb_sys_lseek;
> + case 63: return gdb_sys_read;
> + case 64: return gdb_sys_write;
> + case 65: return gdb_sys_readv;
> + case 66: return gdb_sys_writev;
> + case 67: return gdb_sys_pread64;
> + case 68: return gdb_sys_pwrite64;
> + /* case 69: return gdb_sys_preadv; */
> + /* case 70: return gdb_sys_pwritev; */
> + case 71: return gdb_sys_sendfile;
> + case 72: return gdb_sys_pselect6;
> + case 73: return gdb_sys_ppoll;
> + /* case 74: return gdb_sys_signalfd4; */
> + case 75: return gdb_sys_vmsplice;
> + case 76: return gdb_sys_splice;
> + case 77: return gdb_sys_tee;
> + case 78: return gdb_sys_readlinkat;
> + case 79: return gdb_sys_newfstatat;
> + case 80: return gdb_sys_fstat;
> + case 81: return gdb_sys_sync;
> + case 82: return gdb_sys_fsync;
> + case 83: return gdb_sys_fdatasync;
> + case 84: return gdb_sys_sync_file_range;
> + /* case 85: return gdb_sys_timerfd_create; */
> + /* case 86: return gdb_sys_timerfd_settime; */
> + /* case 87: return gdb_sys_timerfd_gettime; */
> + /* case 88: return gdb_sys_utimensat; */
> + case 89: return gdb_sys_acct;
> + case 90: return gdb_sys_capget;
> + case 91: return gdb_sys_capset;
> + case 92: return gdb_sys_personality;
> + case 93: return gdb_sys_exit;
> + case 94: return gdb_sys_exit_group;
> + case 95: return gdb_sys_waitid;
> + case 96: return gdb_sys_set_tid_address;
> + case 97: return gdb_sys_unshare;
> + case 98: return gdb_sys_futex;
> + case 99: return gdb_sys_set_robust_list;
> + case 100: return gdb_sys_get_robust_list;
> + case 101: return gdb_sys_nanosleep;
> + case 102: return gdb_sys_getitimer;
> + case 103: return gdb_sys_setitimer;
> + case 104: return gdb_sys_kexec_load;
> + case 105: return gdb_sys_init_module;
> + case 106: return gdb_sys_delete_module;
> + case 107: return gdb_sys_timer_create;
> + case 108: return gdb_sys_timer_gettime;
> + case 109: return gdb_sys_timer_getoverrun;
> + case 110: return gdb_sys_timer_settime;
> + case 111: return gdb_sys_timer_delete;
> + case 112: return gdb_sys_clock_settime;
> + case 113: return gdb_sys_clock_gettime;
> + case 114: return gdb_sys_clock_getres;
> + case 115: return gdb_sys_clock_nanosleep;
> + case 116: return gdb_sys_syslog;
> + case 117: return gdb_sys_ptrace;
> + case 118: return gdb_sys_sched_setparam;
> + case 119: return gdb_sys_sched_setscheduler;
> + case 120: return gdb_sys_sched_getscheduler;
> + case 121: return gdb_sys_sched_getparam;
> + case 122: return gdb_sys_sched_setaffinity;
> + case 123: return gdb_sys_sched_getaffinity;
> + case 124: return gdb_sys_sched_yield;
> + case 125: return gdb_sys_sched_get_priority_max;
> + case 126: return gdb_sys_sched_get_priority_min;
> + case 127: return gdb_sys_sched_rr_get_interval;
> + case 128: return gdb_sys_restart_syscall;
> + case 129: return gdb_sys_kill;
> + case 130: return gdb_sys_tkill;
> + case 131: return gdb_sys_tgkill;
> + case 132: return gdb_sys_sigaltstack;
> + case 133: return gdb_sys_rt_sigsuspend;
> + case 134: return gdb_sys_rt_sigaction;
> + case 135: return gdb_sys_rt_sigprocmask;
> + case 136: return gdb_sys_rt_sigpending;
> + case 137: return gdb_sys_rt_sigtimedwait;
> + case 138: return gdb_sys_rt_sigqueueinfo;
> + case 139: return gdb_sys_rt_sigreturn;
> + case 140: return gdb_sys_setpriority;
> + case 141: return gdb_sys_getpriority;
> + case 142: return gdb_sys_reboot;
> + case 143: return gdb_sys_setregid;
> + case 144: return gdb_sys_setgid;
> + case 145: return gdb_sys_setreuid;
> + case 146: return gdb_sys_setuid;
> + case 147: return gdb_sys_setresuid;
> + case 148: return gdb_sys_getresuid;
> + case 149: return gdb_sys_setresgid;
> + case 150: return gdb_sys_getresgid;
> + case 151: return gdb_sys_setfsuid;
> + case 152: return gdb_sys_setfsgid;
> + case 153: return gdb_sys_times;
> + case 154: return gdb_sys_setpgid;
> + case 155: return gdb_sys_getpgid;
> + case 156: return gdb_sys_getsid;
> + case 157: return gdb_sys_setsid;
> + case 158: return gdb_sys_getgroups;
> + case 159: return gdb_sys_setgroups;
> + case 160: return gdb_sys_uname;
> + case 161: return gdb_sys_sethostname;
> + case 162: return gdb_sys_setdomainname;
> + case 163: return gdb_sys_getrlimit;
> + case 164: return gdb_sys_setrlimit;
> + case 165: return gdb_sys_getrusage;
> + case 166: return gdb_sys_umask;
> + case 167: return gdb_sys_prctl;
> + case 168: return gdb_sys_getcpu;
> + case 169: return gdb_sys_gettimeofday;
> + case 170: return gdb_sys_settimeofday;
> + case 171: return gdb_sys_adjtimex;
> + case 172: return gdb_sys_getpid;
> + case 173: return gdb_sys_getppid;
> + case 174: return gdb_sys_getuid;
> + case 175: return gdb_sys_geteuid;
> + case 176: return gdb_sys_getgid;
> + case 177: return gdb_sys_getegid;
> + case 178: return gdb_sys_gettid;
> + case 179: return gdb_sys_sysinfo;
> + case 180: return gdb_sys_mq_open;
> + case 181: return gdb_sys_mq_unlink;
> + case 182: return gdb_sys_mq_timedsend;
> + case 183: return gdb_sys_mq_timedreceive;
> + case 184: return gdb_sys_mq_notify;
> + case 185: return gdb_sys_mq_getsetattr;
> + case 186: return gdb_sys_msgget;
> + case 187: return gdb_sys_msgctl;
> + case 188: return gdb_sys_msgrcv;
> + case 189: return gdb_sys_msgsnd;
> + case 190: return gdb_sys_semget;
> + case 191: return gdb_sys_semctl;
> + case 192: return gdb_sys_semtimedop;
> + case 193: return gdb_sys_semop;
> + case 194: return gdb_sys_shmget;
> + case 195: return gdb_sys_shmctl;
> + case 196: return gdb_sys_shmat;
> + case 197: return gdb_sys_shmdt;
> + case 198: return gdb_sys_socket;
> + case 199: return gdb_sys_socketpair;
> + case 200: return gdb_sys_bind;
> + case 201: return gdb_sys_listen;
> + case 202: return gdb_sys_accept;
> + case 203: return gdb_sys_connect;
> + case 204: return gdb_sys_getsockname;
> + case 205: return gdb_sys_getpeername;
> + case 206: return gdb_sys_sendto;
> + case 207: return gdb_sys_recvfrom;
> + case 208: return gdb_sys_setsockopt;
> + case 209: return gdb_sys_getsockopt;
> + case 210: return gdb_sys_shutdown;
> + case 211: return gdb_sys_sendmsg;
> + case 212: return gdb_sys_recvmsg;
> + case 213: return gdb_sys_readahead;
> + case 214: return gdb_sys_brk;
> + case 215: return gdb_sys_munmap;
> + case 216: return gdb_sys_mremap;
> + case 217: return gdb_sys_add_key;
> + case 218: return gdb_sys_request_key;
> + case 219: return gdb_sys_keyctl;
> + case 220: return gdb_sys_clone;
> + case 221: return gdb_sys_execve;
> + case 222: return gdb_old_mmap;
> + case 223: return gdb_sys_fadvise64;
> + case 224: return gdb_sys_swapon;
> + case 225: return gdb_sys_swapoff;
> + case 226: return gdb_sys_mprotect;
> + case 227: return gdb_sys_msync;
> + case 228: return gdb_sys_mlock;
> + case 229: return gdb_sys_munlock;
> + case 230: return gdb_sys_mlockall;
> + case 231: return gdb_sys_munlockall;
> + case 232: return gdb_sys_mincore;
> + case 233: return gdb_sys_madvise;
> + case 234: return gdb_sys_remap_file_pages;
> + case 235: return gdb_sys_mbind;
> + case 236: return gdb_sys_get_mempolicy;
> + case 237: return gdb_sys_set_mempolicy;
> + case 238: return gdb_sys_migrate_pages;
> + case 239: return gdb_sys_move_pages;
> + /* case 240: return gdb_sys_rt_tgsigqueueinfo; */
> + /* case 241: return gdb_sys_perf_event_open; */
> + /* case 242: return gdb_sys_accept4; */
> + /* case 243: return gdb_sys_recvmmsg; */
> + /* case 258: return gdb_sys_riscv_hwprobe; */
> + /* case 259: return gdb_sys_riscv_flush_icache; */
> + case 260: return gdb_sys_wait4;
> + /* case 261: return gdb_sys_prlimit64; */
> + /* case 262: return gdb_sys_fanotify_init; */
> + /* case 263: return gdb_sys_fanotify_mark; */
> + /* case 264: return gdb_sys_name_to_handle_at; */
> + /* case 265: return gdb_sys_open_by_handle_at; */
> + /* case 266: return gdb_sys_clock_adjtime; */
> + /* case 267: return gdb_sys_syncfs; */
> + /* case 268: return gdb_sys_setns; */
> + /* case 269: return gdb_sys_sendmmsg; */
> + /* case 270: return gdb_sys_process_vm_readv; */
> + /* case 271: return gdb_sys_process_vm_writev; */
> + /* case 272: return gdb_sys_kcmp; */
> + /* case 273: return gdb_sys_finit_module; */
> + /* case 274: return gdb_sys_sched_setattr; */
> + /* case 275: return gdb_sys_sched_getattr; */
> + /* case 276: return gdb_sys_renameat2; */
> + /* case 277: return gdb_sys_seccomp; */
> + case 278: return gdb_sys_getrandom;
> + /* case 279: return gdb_sys_memfd_create; */
> + /* case 280: return gdb_sys_bpf; */
> + /* case 281: return gdb_sys_execveat; */
> + /* case 282: return gdb_sys_userfaultfd; */
> + /* case 283: return gdb_sys_membarrier; */
> + /* case 284: return gdb_sys_mlock2; */
> + /* case 285: return gdb_sys_copy_file_range; */
> + /* case 286: return gdb_sys_preadv2; */
> + /* case 287: return gdb_sys_pwritev2; */
> + /* case 288: return gdb_sys_pkey_mprotect; */
> + /* case 289: return gdb_sys_pkey_alloc; */
> + /* case 290: return gdb_sys_pkey_free; */
> + case 291: return gdb_sys_statx;
> + /* case 292: return gdb_sys_io_pgetevents; */
> + /* case 293: return gdb_sys_rseq; */
> + /* case 294: return gdb_sys_kexec_file_load; */
> + /* case 424: return gdb_sys_pidfd_send_signal; */
> + /* case 425: return gdb_sys_io_uring_setup; */
> + /* case 426: return gdb_sys_io_uring_enter; */
> + /* case 427: return gdb_sys_io_uring_register; */
> + /* case 428: return gdb_sys_open_tree; */
> + /* case 429: return gdb_sys_move_mount; */
> + /* case 430: return gdb_sys_fsopen; */
> + /* case 431: return gdb_sys_fsconfig; */
> + /* case 432: return gdb_sys_fsmount; */
> + /* case 433: return gdb_sys_fspick; */
> + /* case 434: return gdb_sys_pidfd_open; */
> + /* case 435: return gdb_sys_clone3; */
> + /* case 436: return gdb_sys_close_range; */
> + /* case 437: return gdb_sys_openat2; */
> + /* case 438: return gdb_sys_pidfd_getfd; */
> + /* case 439: return gdb_sys_faccessat2; */
> + /* case 440: return gdb_sys_process_madvise; */
> + /* case 441: return gdb_sys_epoll_pwait2; */
> + /* case 442: return gdb_sys_mount_setattr; */
> + /* case 443: return gdb_sys_quotactl_fd; */
> + /* case 444: return gdb_sys_landlock_create_ruleset; */
> + /* case 445: return gdb_sys_landlock_add_rule; */
> + /* case 446: return gdb_sys_landlock_restrict_self; */
> + /* case 447: return gdb_sys_memfd_secret; */
> + /* case 448: return gdb_sys_process_mrelease; */
> + /* case 449: return gdb_sys_futex_waitv; */
> + /* case 450: return gdb_sys_set_mempolicy_home_node; */
> + default:
> + return gdb_sys_no_syscall;
> + }
> +}
> diff --git a/gdb/riscv-linux-tdep.c b/gdb/riscv-linux-tdep.c
> index 12cab06f276..ebaed9b4508 100644
> --- a/gdb/riscv-linux-tdep.c
> +++ b/gdb/riscv-linux-tdep.c
> @@ -187,9 +187,11 @@ static linux_record_tdep riscv_linux_record_tdep;
> using regnum_type = int;
>
> static bool
> -save_registers (struct regcache *regcache, regnum_type fir, regnum_type last)
> +save_registers (struct regcache *regcache, regnum_type first, regnum_type last)
> {
> - for (regnum_type i = fir; i != last; ++i)
> + gdb_assert (regcache != nullptr);
> +
> + for (regnum_type i = first; i != last; ++i)
> if (record_full_arch_list_add_reg (regcache, i))
> return false;
> return true;
> @@ -198,6 +200,8 @@ save_registers (struct regcache *regcache, regnum_type fir, regnum_type last)
> static bool
> riscv_all_but_pc_registers_record (struct regcache *regcache)
> {
> + gdb_assert (regcache != nullptr);
> +
> auto &&gdbarch = regcache->arch ();
> auto &&tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
> auto &&features = tdep->isa_features;
> @@ -219,12 +223,12 @@ static int
> riscv_linux_syscall_record (struct regcache *regcache,
> unsigned long svc_number)
> {
> + gdb_assert (regcache != nullptr);
> +
> auto syscall_gdb = riscv64_canonicalize_syscall (svc_number);
>
> if (record_debug > 1)
> - {
> - gdb_printf (gdb_stdlog, "Made syscall %s.\n", plongest (svc_number));
> - }
> + gdb_printf (gdb_stdlog, "Made syscall %s.\n", plongest (svc_number));
>
> if (syscall_gdb == gdb_sys_no_syscall)
> {
> @@ -258,9 +262,11 @@ riscv_linux_syscall_record (struct regcache *regcache,
> /* These values are the size of the type that will be used in a system
> call. They are obtained from Linux Kernel source. */
> static void
> -riscv64_linux_record_tdep_init (
> - struct gdbarch *gdbarch, struct linux_record_tdep &riscv_linux_record_tdep)
> +riscv64_linux_record_tdep_init (struct gdbarch *gdbarch,
> + struct linux_record_tdep &riscv_linux_record_tdep)
> {
> + gdb_assert (gdbarch != nullptr);
> +
> /* Initialize the riscv_linux_record_tdep. */
> /* These values are the size of the type that will be used in a system
> call. They are obtained from Linux Kernel source. */
> @@ -427,7 +433,7 @@ riscv64_linux_record_tdep_init (
> static void
> riscv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
> {
> - riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
> + auto tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
>
> linux_init_abi (info, gdbarch, 0);
>
> diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
> index c6c7b7a63fd..37ec30fff91 100644
> --- a/gdb/riscv-tdep.c
> +++ b/gdb/riscv-tdep.c
> @@ -4843,7 +4843,7 @@ this option can be used."),
> static bool
> try_read (struct regcache *regcache, int regnum, ULONGEST &addr)
> {
> - gdb_assert (regcache);
> + gdb_assert (regcache != nullptr);
>
> if (regcache->raw_read<ULONGEST> (regnum, &addr)
> != register_status::REG_VALID)
> @@ -4964,12 +4964,10 @@ class riscv_recorded_insn final
> read_reg (struct regcache *regcache, regnum_type reg,
> ULONGEST &addr) noexcept
> {
> - gdb_assert (regcache);
> + gdb_assert (regcache != nullptr);
>
> if (!try_read (regcache, reg, addr))
> - {
> - return set_error ();
> - }
> + return set_error ();
> return true;
> }
>
> @@ -5143,14 +5141,14 @@ class riscv_recorded_insn final
> bool
> try_save_pc_mem (ULONGEST ival, struct regcache *regcache) noexcept
> {
> - gdb_assert (regcache);
> + gdb_assert (regcache != nullptr);
>
> - mem_addr addr = 0;
> + auto addr = mem_addr{};
> auto len = need_save_pc_mem (ival);
> if (len <= 0)
> return false;
>
> - mem_len offset = EXTRACT_STYPE_IMM (ival);
> + auto offset = mem_len{EXTRACT_STYPE_IMM (ival)};
> return !read_reg (regcache, decode_rs1 (ival), addr)
> || !save_mem (addr + offset, len) || set_ordinary_record_type ();
> }
> @@ -5178,10 +5176,10 @@ class riscv_recorded_insn final
> bool
> try_save_pc_rd_mem (ULONGEST ival, struct regcache *regcache) noexcept
> {
> - gdb_assert (regcache);
> + gdb_assert (regcache != nullptr);
>
> auto len = need_save_pc_rd_mem (ival);
> - mem_addr addr = 0;
> + auto addr = mem_addr{};
> if (len <= 0)
> return false;
>
> @@ -5205,9 +5203,9 @@ class riscv_recorded_insn final
> bool
> try_save_pc_rs2_rd_mem (ULONGEST ival, struct regcache *regcache) noexcept
> {
> - gdb_assert (regcache);
> + gdb_assert (regcache != nullptr);
>
> - mem_addr addr = 0;
> + auto addr = mem_addr{};
> auto len = need_save_pc_rs2_rd_mem (ival);
> if (len <= 0)
> return false;
> @@ -5222,7 +5220,7 @@ class riscv_recorded_insn final
> bool
> record_insn_len4 (ULONGEST ival, struct regcache *regcache) noexcept
> {
> - gdb_assert (regcache);
> + gdb_assert (regcache != nullptr);
>
> if (is_ecall_insn (ival))
> {
> @@ -5240,9 +5238,7 @@ class riscv_recorded_insn final
> || try_save_pc_rd_csr (ival) || try_save_pc_mem (ival, regcache)
> || try_save_pc_rd_mem (ival, regcache)
> || try_save_pc_rs2_rd_mem (ival, regcache))
> - {
> - return !has_error ();
> - }
> + return !has_error ();
>
> warning (_ ("Currently this instruction with len 4(%lx) is unsupported"),
> ival);
> @@ -5255,10 +5251,10 @@ class riscv_recorded_insn final
> record_insn_len2 (ULONGEST ival, struct regcache *regcache,
> struct gdbarch *gdbarch) noexcept
> {
> - gdb_assert (regcache);
> - gdb_assert (gdbarch);
> + gdb_assert (regcache != nullptr);
> + gdb_assert (gdbarch != nullptr);
>
> - mem_addr addr = 0;
> + auto addr = mem_addr{};
> auto xlen = riscv_isa_xlen (gdbarch);
>
> /* The order here is very important, because
> @@ -5266,100 +5262,70 @@ class riscv_recorded_insn final
>
> if (is_c_addi4spn_insn (ival) || is_c_lw_insn (ival)
> || (xlen == 8 && is_c_ld_insn (ival)))
> - {
> - return !save_reg (decode_crs2_short (ival))
> - || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs2_short (ival))
> + || set_ordinary_record_type ();
>
> if (is_c_fld_insn (ival) || (xlen == 4 && is_c_flw_insn (ival)))
> - {
> - return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs2_short (ival))
> - || set_ordinary_record_type ();
> - }
> + return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs2_short (ival))
> + || set_ordinary_record_type ();
>
> if (is_c_fsd_insn (ival) || (xlen == 8 && is_c_sd_insn (ival)))
> {
> - int offset = EXTRACT_CLTYPE_LD_IMM (ival);
> + auto offset = int{EXTRACT_CLTYPE_LD_IMM (ival)};
> return !read_reg (regcache, decode_crs1_short (ival), addr)
> || !save_mem (addr + offset, 8) || set_ordinary_record_type ();
> }
>
> if ((xlen == 4 && is_c_fsw_insn (ival)) || is_c_sw_insn (ival))
> {
> - int offset = EXTRACT_CLTYPE_LW_IMM (ival);
> + auto offset = int{EXTRACT_CLTYPE_LW_IMM (ival)};
> return !read_reg (regcache, decode_crs1_short (ival), addr)
> || !save_mem (addr + offset, 4) || set_ordinary_record_type ();
> }
>
> if (is_c_nop_insn (ival))
> - {
> - return set_ordinary_record_type ();
> - }
> + return set_ordinary_record_type ();
>
> if (is_c_addi_insn (ival))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (xlen == 4 && is_c_jal_insn (ival))
> - {
> - return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
> - }
> + return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
>
> if ((xlen == 8 && is_c_addiw_insn (ival)) || is_c_li_insn (ival))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (is_c_addi16sp_insn (ival))
> - {
> - return !save_reg (RISCV_SP_REGNUM) || set_ordinary_record_type ();
> - }
> + return !save_reg (RISCV_SP_REGNUM) || set_ordinary_record_type ();
>
> if (is_c_lui_insn (ival))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (is_c_srli_insn (ival) || is_c_srai_insn (ival) || is_c_andi_insn (ival)
> || is_c_sub_insn (ival) || is_c_xor_insn (ival) || is_c_or_insn (ival)
> || is_c_and_insn (ival) || (xlen == 8 && is_c_subw_insn (ival))
> || (xlen == 8 && is_c_addw_insn (ival)))
> - {
> - return !save_reg (decode_crs1_short (ival))
> - || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1_short (ival))
> + || set_ordinary_record_type ();
>
> if (is_c_j_insn (ival) || is_c_beqz_insn (ival) || is_c_bnez_insn (ival))
> - {
> - return set_ordinary_record_type ();
> - }
> + return set_ordinary_record_type ();
>
> if (is_c_slli_insn (ival))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (is_c_fldsp_insn (ival) || (xlen == 4 && is_c_flwsp_insn (ival)))
> - {
> - return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs1 (ival))
> - || set_ordinary_record_type ();
> - }
> + return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs1 (ival))
> + || set_ordinary_record_type ();
>
> if (is_c_lwsp_insn (ival) || (xlen == 8 && is_c_ldsp_insn (ival)))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (is_c_jr_insn (ival))
> - {
> - return set_ordinary_record_type ();
> - }
> + return set_ordinary_record_type ();
>
> if (is_c_mv_insn (ival))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (is_c_ebreak_insn (ival))
> {
> @@ -5368,25 +5334,21 @@ class riscv_recorded_insn final
> }
>
> if (is_c_jalr_insn (ival))
> - {
> - return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
> - }
> + return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
>
> if (is_c_add_insn (ival))
> - {
> - return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
> - }
> + return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
>
> if (is_c_fsdsp_insn (ival) || (xlen == 8 && is_c_sdsp_insn (ival)))
> {
> - int offset = EXTRACT_CSSTYPE_SDSP_IMM (ival);
> + auto offset = int{EXTRACT_CSSTYPE_SDSP_IMM (ival)};
> return !read_reg (regcache, RISCV_SP_REGNUM, addr)
> || !save_mem (addr + offset, 8) || set_ordinary_record_type ();
> }
>
> if (is_c_swsp_insn (ival) || (xlen == 4 && is_c_fswsp_insn (ival)))
> {
> - int offset = EXTRACT_CSSTYPE_SWSP_IMM (ival);
> + auto offset = int{EXTRACT_CSSTYPE_SWSP_IMM (ival)};
> return !read_reg (regcache, RISCV_SP_REGNUM, addr)
> || !save_mem (addr + offset, 4) || set_ordinary_record_type ();
> }
> @@ -5403,7 +5365,10 @@ class riscv_recorded_insn final
> bool
> record (gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr) noexcept
> {
> - int m_length = 0;
> + gdb_assert (gdbarch != nullptr);
> + gdb_assert (regcache != nullptr);
> +
> + auto m_length = int{};
> auto ival = riscv_insn::fetch_instruction (gdbarch, addr, &m_length);
> if (!save_reg (RISCV_PC_REGNUM))
> return false;
> @@ -5458,9 +5423,10 @@ static int
> riscv_make_record_process (struct gdbarch *gdbarch, struct regcache *regcache,
> const riscv_recorded_insn &insn)
> {
> - gdb_assert (gdbarch && regcache);
> + gdb_assert (gdbarch != nullptr);
> + gdb_assert (regcache != nullptr);
>
> - riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
> + auto tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
> auto regs_begin = insn.regs_begin ();
> auto regs_end = insn.regs_end ();
> if (std::any_of (regs_begin, regs_end, [®cache] (auto &®_it) {
> @@ -5487,11 +5453,9 @@ riscv_make_record_process (struct gdbarch *gdbarch, struct regcache *regcache,
> warning (_ ("Syscall record is not supported"));
> return -1;
> }
> - ULONGEST reg_val = 0;
> + auto reg_val = ULONGEST{};
> if (!try_read (regcache, RISCV_A7_REGNUM, reg_val))
> - {
> - return -1;
> - }
> + return -1;
> return tdep->riscv_syscall_record (regcache, reg_val);
> }
>
> @@ -5508,7 +5472,8 @@ int
> riscv_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> CORE_ADDR addr)
> {
> - gdb_assert (gdbarch && regcache);
> + gdb_assert (gdbarch != nullptr);
> + gdb_assert (regcache != nullptr);
>
> riscv_recorded_insn insn;
> if (!insn.record (gdbarch, regcache, addr))
> @@ -5520,9 +5485,7 @@ riscv_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> auto ret_val = riscv_make_record_process (gdbarch, regcache, insn);
>
> if (record_full_arch_list_add_end ())
> - {
> - return -1;
> - }
> + return -1;
>
> return ret_val;
> }
> --
> 2.34.1
>
new file mode 100755
@@ -0,0 +1,1484 @@
+#! /bin/bash
+# Generated by configure.
+# Run this file to recreate a libtool stub with the current configuration.
+SHELL=${CONFIG_SHELL-/bin/bash}
+export SHELL
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## --------------------------------- ##
+## Main body of "$CONFIG_LT" script. ##
+## --------------------------------- ##
+lt_cl_silent=false
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $0 [OPTIONS]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+config.lt
+configured by $0, generated by GNU Autoconf 2.69.
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $# != 0
+do
+ case $1 in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) as_fn_error $? "unrecognized option: $1
+Try \`$0 --help' for more information." "$LINENO" 5 ;;
+
+ *) as_fn_error $? "unrecognized argument: $1
+Try \`$0 --help' for more information." "$LINENO" 5 ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec 6>/dev/null
+fi
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+macro_version='2.2.7a'
+macro_revision='1.3134'
+enable_shared='yes'
+enable_static='yes'
+pic_mode='default'
+enable_fast_install='needless'
+SHELL='/bin/bash'
+ECHO='printf %s\n'
+host_alias='x86_64-pc-linux-gnu'
+host='x86_64-pc-linux-gnu'
+host_os='linux-gnu'
+build_alias='x86_64-pc-linux-gnu'
+build='x86_64-pc-linux-gnu'
+build_os='linux-gnu'
+SED='/usr/bin/sed'
+Xsed='/usr/bin/sed -e 1s/^X//'
+GREP='/usr/bin/grep'
+EGREP='/usr/bin/grep -E'
+FGREP='/usr/bin/grep -F'
+LD='ld -m elf_x86_64'
+NM='/usr/bin/nm -B'
+LN_S='ln -s'
+max_cmd_len='1572864'
+ac_objext='o'
+exeext=''
+lt_unset='unset'
+lt_SP2NL='tr \040 \012'
+lt_NL2SP='tr \015\012 \040\040'
+reload_flag=' -r'
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+OBJDUMP='objdump'
+deplibs_check_method='pass_all'
+file_magic_cmd='$MAGIC_CMD'
+AR='ar --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so'
+AR_FLAGS='rc'
+STRIP='strip'
+RANLIB='ranlib --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so --plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so'
+old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib'
+old_postuninstall_cmds=''
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib'
+lock_old_archive_extraction='no'
+CC='gcc'
+CFLAGS='-g -O2 '
+compiler='g++'
+GCC='yes'
+lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'''
+lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
+lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\'''
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\'''
+objdir='.libs'
+MAGIC_CMD='file'
+lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+lt_prog_compiler_wl='-Wl,'
+lt_prog_compiler_pic=' -fPIC -DPIC'
+lt_prog_compiler_static='-static'
+lt_cv_prog_compiler_c_o='yes'
+need_locks='no'
+DSYMUTIL='dsymutil'
+NMEDIT=''
+LIPO='lipo'
+OTOOL='otool'
+OTOOL64=''
+libext='a'
+shrext_cmds='.so'
+extract_expsyms_cmds=''
+archive_cmds_need_lc='no'
+enable_shared_with_static_runtimes='no'
+export_dynamic_flag_spec='${wl}--export-dynamic'
+whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+compiler_needs_object='no'
+old_archive_from_new_cmds=''
+old_archive_from_expsyms_cmds=''
+archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+module_cmds=''
+module_expsym_cmds=''
+with_gnu_ld='yes'
+allow_undefined_flag=''
+no_undefined_flag=''
+hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+hardcode_libdir_flag_spec_ld=''
+hardcode_libdir_separator=''
+hardcode_direct='no'
+hardcode_direct_absolute='no'
+hardcode_minus_L='no'
+hardcode_shlibpath_var='unsupported'
+hardcode_automatic='no'
+inherit_rpath='no'
+link_all_deplibs='unknown'
+fix_srcfile_path=''
+always_export_symbols='no'
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+include_expsyms=''
+prelink_cmds=''
+file_list_spec=''
+variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH'
+need_lib_prefix='no'
+need_version='no'
+version_type='linux'
+runpath_var='LD_RUN_PATH'
+shlibpath_var='LD_LIBRARY_PATH'
+shlibpath_overrides_runpath='yes'
+libname_spec='lib$name'
+library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+soname_spec='${libname}${release}${shared_ext}$major'
+install_override_mode=''
+postinstall_cmds=''
+postuninstall_cmds=''
+finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+finish_eval=''
+hardcode_into_libs='yes'
+sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/11 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib '
+sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /usr/local/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib32 /usr/lib32 '
+hardcode_action='immediate'
+enable_dlopen='unknown'
+enable_dlopen_self='unknown'
+enable_dlopen_self_static='unknown'
+old_striplib='strip --strip-debug'
+striplib='strip --strip-unneeded'
+compiler_lib_search_dirs=''
+predep_objects=''
+postdep_objects=''
+predeps=''
+postdeps=''
+compiler_lib_search_path=''
+LD_CXX='ld -m elf_x86_64'
+reload_flag_CXX=' -r'
+reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs'
+old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib'
+compiler_CXX='g++'
+GCC_CXX='yes'
+lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+lt_prog_compiler_wl_CXX='-Wl,'
+lt_prog_compiler_pic_CXX=' -fPIC -DPIC'
+lt_prog_compiler_static_CXX='-static'
+lt_cv_prog_compiler_c_o_CXX='yes'
+archive_cmds_need_lc_CXX='no'
+enable_shared_with_static_runtimes_CXX='no'
+export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+compiler_needs_object_CXX='no'
+old_archive_from_new_cmds_CXX=''
+old_archive_from_expsyms_cmds_CXX=''
+archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+module_cmds_CXX=''
+module_expsym_cmds_CXX=''
+with_gnu_ld_CXX='yes'
+allow_undefined_flag_CXX=''
+no_undefined_flag_CXX=''
+hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+hardcode_libdir_flag_spec_ld_CXX=''
+hardcode_libdir_separator_CXX=''
+hardcode_direct_CXX='no'
+hardcode_direct_absolute_CXX='no'
+hardcode_minus_L_CXX='no'
+hardcode_shlibpath_var_CXX='unsupported'
+hardcode_automatic_CXX='no'
+inherit_rpath_CXX='no'
+link_all_deplibs_CXX='unknown'
+fix_srcfile_path_CXX=''
+always_export_symbols_CXX='no'
+export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+include_expsyms_CXX=''
+prelink_cmds_CXX=''
+file_list_spec_CXX=''
+hardcode_action_CXX='immediate'
+compiler_lib_search_dirs_CXX='/usr/lib/gcc/x86_64-linux-gnu/11 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/11/../../..'
+predep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o'
+postdep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o'
+predeps_CXX=''
+postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s'
+compiler_lib_search_path_CXX='-L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../..'
+
+LTCC='gcc'
+LTCFLAGS='-g -O2 '
+compiler='gcc'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL ECHO SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd AR AR_FLAGS STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_prog_compiler_no_builtin_flag lt_prog_compiler_wl lt_prog_compiler_pic lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator fix_srcfile_path exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_flag_spec_ld_CXX hardcode_libdir_separator_CXX fix_srcfile_path_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do
+ case `eval \\$ECHO \\""\\$$var"\\"` in
+ *[\\\`\"\$]*)
+ eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\$$var\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX; do
+ case `eval \\$ECHO \\""\\$$var"\\"` in
+ *[\\\`\"\$]*)
+ eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\$$var\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='..'
+xsi_shell='yes'
+lt_shell_append='yes'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE=''
+ VERSION=''
+ TIMESTAMP=''
+ RM='rm -f'
+ ofile='libtool'
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5
+$as_echo "$as_me: creating $ofile" >&6;}
+
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+
+ cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+
+as_fn_exit 0
new file mode 100644
@@ -0,0 +1,338 @@
+/* DO NOT EDIT: Autogenerated by riscv-canonicalize-syscall-gen.py
+
+ Copyright (C) 2024 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/>. */
+
+#include "defs.h"
+#include "riscv-linux-tdep.h"
+
+enum gdb_syscall
+riscv64_canonicalize_syscall (int syscall)
+{
+ switch (syscall)
+ {
+ case 0: return gdb_sys_io_setup;
+ case 1: return gdb_sys_io_destroy;
+ case 2: return gdb_sys_io_submit;
+ case 3: return gdb_sys_io_cancel;
+ case 4: return gdb_sys_io_getevents;
+ case 5: return gdb_sys_setxattr;
+ case 6: return gdb_sys_lsetxattr;
+ case 7: return gdb_sys_fsetxattr;
+ case 8: return gdb_sys_getxattr;
+ case 9: return gdb_sys_lgetxattr;
+ case 10: return gdb_sys_fgetxattr;
+ case 11: return gdb_sys_listxattr;
+ case 12: return gdb_sys_llistxattr;
+ case 13: return gdb_sys_flistxattr;
+ case 14: return gdb_sys_removexattr;
+ case 15: return gdb_sys_lremovexattr;
+ case 16: return gdb_sys_fremovexattr;
+ case 17: return gdb_sys_getcwd;
+ case 18: return gdb_sys_lookup_dcookie;
+ case 19: return gdb_sys_eventfd2;
+ case 20: return gdb_sys_epoll_create1;
+ case 21: return gdb_sys_epoll_ctl;
+ case 22: return gdb_sys_epoll_pwait;
+ case 23: return gdb_sys_dup;
+ case 24: return gdb_sys_dup3;
+ case 25: return gdb_sys_fcntl;
+ case 26: return gdb_sys_inotify_init1;
+ case 27: return gdb_sys_inotify_add_watch;
+ case 28: return gdb_sys_inotify_rm_watch;
+ case 29: return gdb_sys_ioctl;
+ case 30: return gdb_sys_ioprio_set;
+ case 31: return gdb_sys_ioprio_get;
+ case 32: return gdb_sys_flock;
+ case 33: return gdb_sys_mknodat;
+ case 34: return gdb_sys_mkdirat;
+ case 35: return gdb_sys_unlinkat;
+ case 36: return gdb_sys_symlinkat;
+ case 37: return gdb_sys_linkat;
+ /* case 39: return gdb_sys_umount2; */
+ case 40: return gdb_sys_mount;
+ case 41: return gdb_sys_pivot_root;
+ case 42: return gdb_sys_nfsservctl;
+ case 43: return gdb_sys_statfs;
+ case 44: return gdb_sys_fstatfs;
+ case 45: return gdb_sys_truncate;
+ case 46: return gdb_sys_ftruncate;
+ case 47: return gdb_sys_fallocate;
+ case 48: return gdb_sys_faccessat;
+ case 49: return gdb_sys_chdir;
+ case 50: return gdb_sys_fchdir;
+ case 51: return gdb_sys_chroot;
+ case 52: return gdb_sys_fchmod;
+ case 53: return gdb_sys_fchmodat;
+ case 54: return gdb_sys_fchownat;
+ case 55: return gdb_sys_fchown;
+ case 56: return gdb_sys_openat;
+ case 57: return gdb_sys_close;
+ case 58: return gdb_sys_vhangup;
+ case 59: return gdb_sys_pipe2;
+ case 60: return gdb_sys_quotactl;
+ case 61: return gdb_sys_getdents64;
+ case 62: return gdb_sys_lseek;
+ case 63: return gdb_sys_read;
+ case 64: return gdb_sys_write;
+ case 65: return gdb_sys_readv;
+ case 66: return gdb_sys_writev;
+ case 67: return gdb_sys_pread64;
+ case 68: return gdb_sys_pwrite64;
+ /* case 69: return gdb_sys_preadv; */
+ /* case 70: return gdb_sys_pwritev; */
+ case 71: return gdb_sys_sendfile;
+ case 72: return gdb_sys_pselect6;
+ case 73: return gdb_sys_ppoll;
+ /* case 74: return gdb_sys_signalfd4; */
+ case 75: return gdb_sys_vmsplice;
+ case 76: return gdb_sys_splice;
+ case 77: return gdb_sys_tee;
+ case 78: return gdb_sys_readlinkat;
+ case 79: return gdb_sys_newfstatat;
+ case 80: return gdb_sys_fstat;
+ case 81: return gdb_sys_sync;
+ case 82: return gdb_sys_fsync;
+ case 83: return gdb_sys_fdatasync;
+ case 84: return gdb_sys_sync_file_range;
+ /* case 85: return gdb_sys_timerfd_create; */
+ /* case 86: return gdb_sys_timerfd_settime; */
+ /* case 87: return gdb_sys_timerfd_gettime; */
+ /* case 88: return gdb_sys_utimensat; */
+ case 89: return gdb_sys_acct;
+ case 90: return gdb_sys_capget;
+ case 91: return gdb_sys_capset;
+ case 92: return gdb_sys_personality;
+ case 93: return gdb_sys_exit;
+ case 94: return gdb_sys_exit_group;
+ case 95: return gdb_sys_waitid;
+ case 96: return gdb_sys_set_tid_address;
+ case 97: return gdb_sys_unshare;
+ case 98: return gdb_sys_futex;
+ case 99: return gdb_sys_set_robust_list;
+ case 100: return gdb_sys_get_robust_list;
+ case 101: return gdb_sys_nanosleep;
+ case 102: return gdb_sys_getitimer;
+ case 103: return gdb_sys_setitimer;
+ case 104: return gdb_sys_kexec_load;
+ case 105: return gdb_sys_init_module;
+ case 106: return gdb_sys_delete_module;
+ case 107: return gdb_sys_timer_create;
+ case 108: return gdb_sys_timer_gettime;
+ case 109: return gdb_sys_timer_getoverrun;
+ case 110: return gdb_sys_timer_settime;
+ case 111: return gdb_sys_timer_delete;
+ case 112: return gdb_sys_clock_settime;
+ case 113: return gdb_sys_clock_gettime;
+ case 114: return gdb_sys_clock_getres;
+ case 115: return gdb_sys_clock_nanosleep;
+ case 116: return gdb_sys_syslog;
+ case 117: return gdb_sys_ptrace;
+ case 118: return gdb_sys_sched_setparam;
+ case 119: return gdb_sys_sched_setscheduler;
+ case 120: return gdb_sys_sched_getscheduler;
+ case 121: return gdb_sys_sched_getparam;
+ case 122: return gdb_sys_sched_setaffinity;
+ case 123: return gdb_sys_sched_getaffinity;
+ case 124: return gdb_sys_sched_yield;
+ case 125: return gdb_sys_sched_get_priority_max;
+ case 126: return gdb_sys_sched_get_priority_min;
+ case 127: return gdb_sys_sched_rr_get_interval;
+ case 128: return gdb_sys_restart_syscall;
+ case 129: return gdb_sys_kill;
+ case 130: return gdb_sys_tkill;
+ case 131: return gdb_sys_tgkill;
+ case 132: return gdb_sys_sigaltstack;
+ case 133: return gdb_sys_rt_sigsuspend;
+ case 134: return gdb_sys_rt_sigaction;
+ case 135: return gdb_sys_rt_sigprocmask;
+ case 136: return gdb_sys_rt_sigpending;
+ case 137: return gdb_sys_rt_sigtimedwait;
+ case 138: return gdb_sys_rt_sigqueueinfo;
+ case 139: return gdb_sys_rt_sigreturn;
+ case 140: return gdb_sys_setpriority;
+ case 141: return gdb_sys_getpriority;
+ case 142: return gdb_sys_reboot;
+ case 143: return gdb_sys_setregid;
+ case 144: return gdb_sys_setgid;
+ case 145: return gdb_sys_setreuid;
+ case 146: return gdb_sys_setuid;
+ case 147: return gdb_sys_setresuid;
+ case 148: return gdb_sys_getresuid;
+ case 149: return gdb_sys_setresgid;
+ case 150: return gdb_sys_getresgid;
+ case 151: return gdb_sys_setfsuid;
+ case 152: return gdb_sys_setfsgid;
+ case 153: return gdb_sys_times;
+ case 154: return gdb_sys_setpgid;
+ case 155: return gdb_sys_getpgid;
+ case 156: return gdb_sys_getsid;
+ case 157: return gdb_sys_setsid;
+ case 158: return gdb_sys_getgroups;
+ case 159: return gdb_sys_setgroups;
+ case 160: return gdb_sys_uname;
+ case 161: return gdb_sys_sethostname;
+ case 162: return gdb_sys_setdomainname;
+ case 163: return gdb_sys_getrlimit;
+ case 164: return gdb_sys_setrlimit;
+ case 165: return gdb_sys_getrusage;
+ case 166: return gdb_sys_umask;
+ case 167: return gdb_sys_prctl;
+ case 168: return gdb_sys_getcpu;
+ case 169: return gdb_sys_gettimeofday;
+ case 170: return gdb_sys_settimeofday;
+ case 171: return gdb_sys_adjtimex;
+ case 172: return gdb_sys_getpid;
+ case 173: return gdb_sys_getppid;
+ case 174: return gdb_sys_getuid;
+ case 175: return gdb_sys_geteuid;
+ case 176: return gdb_sys_getgid;
+ case 177: return gdb_sys_getegid;
+ case 178: return gdb_sys_gettid;
+ case 179: return gdb_sys_sysinfo;
+ case 180: return gdb_sys_mq_open;
+ case 181: return gdb_sys_mq_unlink;
+ case 182: return gdb_sys_mq_timedsend;
+ case 183: return gdb_sys_mq_timedreceive;
+ case 184: return gdb_sys_mq_notify;
+ case 185: return gdb_sys_mq_getsetattr;
+ case 186: return gdb_sys_msgget;
+ case 187: return gdb_sys_msgctl;
+ case 188: return gdb_sys_msgrcv;
+ case 189: return gdb_sys_msgsnd;
+ case 190: return gdb_sys_semget;
+ case 191: return gdb_sys_semctl;
+ case 192: return gdb_sys_semtimedop;
+ case 193: return gdb_sys_semop;
+ case 194: return gdb_sys_shmget;
+ case 195: return gdb_sys_shmctl;
+ case 196: return gdb_sys_shmat;
+ case 197: return gdb_sys_shmdt;
+ case 198: return gdb_sys_socket;
+ case 199: return gdb_sys_socketpair;
+ case 200: return gdb_sys_bind;
+ case 201: return gdb_sys_listen;
+ case 202: return gdb_sys_accept;
+ case 203: return gdb_sys_connect;
+ case 204: return gdb_sys_getsockname;
+ case 205: return gdb_sys_getpeername;
+ case 206: return gdb_sys_sendto;
+ case 207: return gdb_sys_recvfrom;
+ case 208: return gdb_sys_setsockopt;
+ case 209: return gdb_sys_getsockopt;
+ case 210: return gdb_sys_shutdown;
+ case 211: return gdb_sys_sendmsg;
+ case 212: return gdb_sys_recvmsg;
+ case 213: return gdb_sys_readahead;
+ case 214: return gdb_sys_brk;
+ case 215: return gdb_sys_munmap;
+ case 216: return gdb_sys_mremap;
+ case 217: return gdb_sys_add_key;
+ case 218: return gdb_sys_request_key;
+ case 219: return gdb_sys_keyctl;
+ case 220: return gdb_sys_clone;
+ case 221: return gdb_sys_execve;
+ case 222: return gdb_old_mmap;
+ case 223: return gdb_sys_fadvise64;
+ case 224: return gdb_sys_swapon;
+ case 225: return gdb_sys_swapoff;
+ case 226: return gdb_sys_mprotect;
+ case 227: return gdb_sys_msync;
+ case 228: return gdb_sys_mlock;
+ case 229: return gdb_sys_munlock;
+ case 230: return gdb_sys_mlockall;
+ case 231: return gdb_sys_munlockall;
+ case 232: return gdb_sys_mincore;
+ case 233: return gdb_sys_madvise;
+ case 234: return gdb_sys_remap_file_pages;
+ case 235: return gdb_sys_mbind;
+ case 236: return gdb_sys_get_mempolicy;
+ case 237: return gdb_sys_set_mempolicy;
+ case 238: return gdb_sys_migrate_pages;
+ case 239: return gdb_sys_move_pages;
+ /* case 240: return gdb_sys_rt_tgsigqueueinfo; */
+ /* case 241: return gdb_sys_perf_event_open; */
+ /* case 242: return gdb_sys_accept4; */
+ /* case 243: return gdb_sys_recvmmsg; */
+ /* case 258: return gdb_sys_riscv_hwprobe; */
+ /* case 259: return gdb_sys_riscv_flush_icache; */
+ case 260: return gdb_sys_wait4;
+ /* case 261: return gdb_sys_prlimit64; */
+ /* case 262: return gdb_sys_fanotify_init; */
+ /* case 263: return gdb_sys_fanotify_mark; */
+ /* case 264: return gdb_sys_name_to_handle_at; */
+ /* case 265: return gdb_sys_open_by_handle_at; */
+ /* case 266: return gdb_sys_clock_adjtime; */
+ /* case 267: return gdb_sys_syncfs; */
+ /* case 268: return gdb_sys_setns; */
+ /* case 269: return gdb_sys_sendmmsg; */
+ /* case 270: return gdb_sys_process_vm_readv; */
+ /* case 271: return gdb_sys_process_vm_writev; */
+ /* case 272: return gdb_sys_kcmp; */
+ /* case 273: return gdb_sys_finit_module; */
+ /* case 274: return gdb_sys_sched_setattr; */
+ /* case 275: return gdb_sys_sched_getattr; */
+ /* case 276: return gdb_sys_renameat2; */
+ /* case 277: return gdb_sys_seccomp; */
+ case 278: return gdb_sys_getrandom;
+ /* case 279: return gdb_sys_memfd_create; */
+ /* case 280: return gdb_sys_bpf; */
+ /* case 281: return gdb_sys_execveat; */
+ /* case 282: return gdb_sys_userfaultfd; */
+ /* case 283: return gdb_sys_membarrier; */
+ /* case 284: return gdb_sys_mlock2; */
+ /* case 285: return gdb_sys_copy_file_range; */
+ /* case 286: return gdb_sys_preadv2; */
+ /* case 287: return gdb_sys_pwritev2; */
+ /* case 288: return gdb_sys_pkey_mprotect; */
+ /* case 289: return gdb_sys_pkey_alloc; */
+ /* case 290: return gdb_sys_pkey_free; */
+ case 291: return gdb_sys_statx;
+ /* case 292: return gdb_sys_io_pgetevents; */
+ /* case 293: return gdb_sys_rseq; */
+ /* case 294: return gdb_sys_kexec_file_load; */
+ /* case 424: return gdb_sys_pidfd_send_signal; */
+ /* case 425: return gdb_sys_io_uring_setup; */
+ /* case 426: return gdb_sys_io_uring_enter; */
+ /* case 427: return gdb_sys_io_uring_register; */
+ /* case 428: return gdb_sys_open_tree; */
+ /* case 429: return gdb_sys_move_mount; */
+ /* case 430: return gdb_sys_fsopen; */
+ /* case 431: return gdb_sys_fsconfig; */
+ /* case 432: return gdb_sys_fsmount; */
+ /* case 433: return gdb_sys_fspick; */
+ /* case 434: return gdb_sys_pidfd_open; */
+ /* case 435: return gdb_sys_clone3; */
+ /* case 436: return gdb_sys_close_range; */
+ /* case 437: return gdb_sys_openat2; */
+ /* case 438: return gdb_sys_pidfd_getfd; */
+ /* case 439: return gdb_sys_faccessat2; */
+ /* case 440: return gdb_sys_process_madvise; */
+ /* case 441: return gdb_sys_epoll_pwait2; */
+ /* case 442: return gdb_sys_mount_setattr; */
+ /* case 443: return gdb_sys_quotactl_fd; */
+ /* case 444: return gdb_sys_landlock_create_ruleset; */
+ /* case 445: return gdb_sys_landlock_add_rule; */
+ /* case 446: return gdb_sys_landlock_restrict_self; */
+ /* case 447: return gdb_sys_memfd_secret; */
+ /* case 448: return gdb_sys_process_mrelease; */
+ /* case 449: return gdb_sys_futex_waitv; */
+ /* case 450: return gdb_sys_set_mempolicy_home_node; */
+ default:
+ return gdb_sys_no_syscall;
+ }
+}
@@ -187,9 +187,11 @@ static linux_record_tdep riscv_linux_record_tdep;
using regnum_type = int;
static bool
-save_registers (struct regcache *regcache, regnum_type fir, regnum_type last)
+save_registers (struct regcache *regcache, regnum_type first, regnum_type last)
{
- for (regnum_type i = fir; i != last; ++i)
+ gdb_assert (regcache != nullptr);
+
+ for (regnum_type i = first; i != last; ++i)
if (record_full_arch_list_add_reg (regcache, i))
return false;
return true;
@@ -198,6 +200,8 @@ save_registers (struct regcache *regcache, regnum_type fir, regnum_type last)
static bool
riscv_all_but_pc_registers_record (struct regcache *regcache)
{
+ gdb_assert (regcache != nullptr);
+
auto &&gdbarch = regcache->arch ();
auto &&tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
auto &&features = tdep->isa_features;
@@ -219,12 +223,12 @@ static int
riscv_linux_syscall_record (struct regcache *regcache,
unsigned long svc_number)
{
+ gdb_assert (regcache != nullptr);
+
auto syscall_gdb = riscv64_canonicalize_syscall (svc_number);
if (record_debug > 1)
- {
- gdb_printf (gdb_stdlog, "Made syscall %s.\n", plongest (svc_number));
- }
+ gdb_printf (gdb_stdlog, "Made syscall %s.\n", plongest (svc_number));
if (syscall_gdb == gdb_sys_no_syscall)
{
@@ -258,9 +262,11 @@ riscv_linux_syscall_record (struct regcache *regcache,
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
static void
-riscv64_linux_record_tdep_init (
- struct gdbarch *gdbarch, struct linux_record_tdep &riscv_linux_record_tdep)
+riscv64_linux_record_tdep_init (struct gdbarch *gdbarch,
+ struct linux_record_tdep &riscv_linux_record_tdep)
{
+ gdb_assert (gdbarch != nullptr);
+
/* Initialize the riscv_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
@@ -427,7 +433,7 @@ riscv64_linux_record_tdep_init (
static void
riscv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
- riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
+ auto tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
linux_init_abi (info, gdbarch, 0);
@@ -4843,7 +4843,7 @@ this option can be used."),
static bool
try_read (struct regcache *regcache, int regnum, ULONGEST &addr)
{
- gdb_assert (regcache);
+ gdb_assert (regcache != nullptr);
if (regcache->raw_read<ULONGEST> (regnum, &addr)
!= register_status::REG_VALID)
@@ -4964,12 +4964,10 @@ class riscv_recorded_insn final
read_reg (struct regcache *regcache, regnum_type reg,
ULONGEST &addr) noexcept
{
- gdb_assert (regcache);
+ gdb_assert (regcache != nullptr);
if (!try_read (regcache, reg, addr))
- {
- return set_error ();
- }
+ return set_error ();
return true;
}
@@ -5143,14 +5141,14 @@ class riscv_recorded_insn final
bool
try_save_pc_mem (ULONGEST ival, struct regcache *regcache) noexcept
{
- gdb_assert (regcache);
+ gdb_assert (regcache != nullptr);
- mem_addr addr = 0;
+ auto addr = mem_addr{};
auto len = need_save_pc_mem (ival);
if (len <= 0)
return false;
- mem_len offset = EXTRACT_STYPE_IMM (ival);
+ auto offset = mem_len{EXTRACT_STYPE_IMM (ival)};
return !read_reg (regcache, decode_rs1 (ival), addr)
|| !save_mem (addr + offset, len) || set_ordinary_record_type ();
}
@@ -5178,10 +5176,10 @@ class riscv_recorded_insn final
bool
try_save_pc_rd_mem (ULONGEST ival, struct regcache *regcache) noexcept
{
- gdb_assert (regcache);
+ gdb_assert (regcache != nullptr);
auto len = need_save_pc_rd_mem (ival);
- mem_addr addr = 0;
+ auto addr = mem_addr{};
if (len <= 0)
return false;
@@ -5205,9 +5203,9 @@ class riscv_recorded_insn final
bool
try_save_pc_rs2_rd_mem (ULONGEST ival, struct regcache *regcache) noexcept
{
- gdb_assert (regcache);
+ gdb_assert (regcache != nullptr);
- mem_addr addr = 0;
+ auto addr = mem_addr{};
auto len = need_save_pc_rs2_rd_mem (ival);
if (len <= 0)
return false;
@@ -5222,7 +5220,7 @@ class riscv_recorded_insn final
bool
record_insn_len4 (ULONGEST ival, struct regcache *regcache) noexcept
{
- gdb_assert (regcache);
+ gdb_assert (regcache != nullptr);
if (is_ecall_insn (ival))
{
@@ -5240,9 +5238,7 @@ class riscv_recorded_insn final
|| try_save_pc_rd_csr (ival) || try_save_pc_mem (ival, regcache)
|| try_save_pc_rd_mem (ival, regcache)
|| try_save_pc_rs2_rd_mem (ival, regcache))
- {
- return !has_error ();
- }
+ return !has_error ();
warning (_ ("Currently this instruction with len 4(%lx) is unsupported"),
ival);
@@ -5255,10 +5251,10 @@ class riscv_recorded_insn final
record_insn_len2 (ULONGEST ival, struct regcache *regcache,
struct gdbarch *gdbarch) noexcept
{
- gdb_assert (regcache);
- gdb_assert (gdbarch);
+ gdb_assert (regcache != nullptr);
+ gdb_assert (gdbarch != nullptr);
- mem_addr addr = 0;
+ auto addr = mem_addr{};
auto xlen = riscv_isa_xlen (gdbarch);
/* The order here is very important, because
@@ -5266,100 +5262,70 @@ class riscv_recorded_insn final
if (is_c_addi4spn_insn (ival) || is_c_lw_insn (ival)
|| (xlen == 8 && is_c_ld_insn (ival)))
- {
- return !save_reg (decode_crs2_short (ival))
- || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs2_short (ival))
+ || set_ordinary_record_type ();
if (is_c_fld_insn (ival) || (xlen == 4 && is_c_flw_insn (ival)))
- {
- return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs2_short (ival))
- || set_ordinary_record_type ();
- }
+ return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs2_short (ival))
+ || set_ordinary_record_type ();
if (is_c_fsd_insn (ival) || (xlen == 8 && is_c_sd_insn (ival)))
{
- int offset = EXTRACT_CLTYPE_LD_IMM (ival);
+ auto offset = int{EXTRACT_CLTYPE_LD_IMM (ival)};
return !read_reg (regcache, decode_crs1_short (ival), addr)
|| !save_mem (addr + offset, 8) || set_ordinary_record_type ();
}
if ((xlen == 4 && is_c_fsw_insn (ival)) || is_c_sw_insn (ival))
{
- int offset = EXTRACT_CLTYPE_LW_IMM (ival);
+ auto offset = int{EXTRACT_CLTYPE_LW_IMM (ival)};
return !read_reg (regcache, decode_crs1_short (ival), addr)
|| !save_mem (addr + offset, 4) || set_ordinary_record_type ();
}
if (is_c_nop_insn (ival))
- {
- return set_ordinary_record_type ();
- }
+ return set_ordinary_record_type ();
if (is_c_addi_insn (ival))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (xlen == 4 && is_c_jal_insn (ival))
- {
- return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
- }
+ return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
if ((xlen == 8 && is_c_addiw_insn (ival)) || is_c_li_insn (ival))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (is_c_addi16sp_insn (ival))
- {
- return !save_reg (RISCV_SP_REGNUM) || set_ordinary_record_type ();
- }
+ return !save_reg (RISCV_SP_REGNUM) || set_ordinary_record_type ();
if (is_c_lui_insn (ival))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (is_c_srli_insn (ival) || is_c_srai_insn (ival) || is_c_andi_insn (ival)
|| is_c_sub_insn (ival) || is_c_xor_insn (ival) || is_c_or_insn (ival)
|| is_c_and_insn (ival) || (xlen == 8 && is_c_subw_insn (ival))
|| (xlen == 8 && is_c_addw_insn (ival)))
- {
- return !save_reg (decode_crs1_short (ival))
- || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1_short (ival))
+ || set_ordinary_record_type ();
if (is_c_j_insn (ival) || is_c_beqz_insn (ival) || is_c_bnez_insn (ival))
- {
- return set_ordinary_record_type ();
- }
+ return set_ordinary_record_type ();
if (is_c_slli_insn (ival))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (is_c_fldsp_insn (ival) || (xlen == 4 && is_c_flwsp_insn (ival)))
- {
- return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs1 (ival))
- || set_ordinary_record_type ();
- }
+ return !save_reg (RISCV_FIRST_FP_REGNUM + decode_crs1 (ival))
+ || set_ordinary_record_type ();
if (is_c_lwsp_insn (ival) || (xlen == 8 && is_c_ldsp_insn (ival)))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (is_c_jr_insn (ival))
- {
- return set_ordinary_record_type ();
- }
+ return set_ordinary_record_type ();
if (is_c_mv_insn (ival))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (is_c_ebreak_insn (ival))
{
@@ -5368,25 +5334,21 @@ class riscv_recorded_insn final
}
if (is_c_jalr_insn (ival))
- {
- return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
- }
+ return !save_reg (RISCV_RA_REGNUM) || set_ordinary_record_type ();
if (is_c_add_insn (ival))
- {
- return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
- }
+ return !save_reg (decode_crs1 (ival)) || set_ordinary_record_type ();
if (is_c_fsdsp_insn (ival) || (xlen == 8 && is_c_sdsp_insn (ival)))
{
- int offset = EXTRACT_CSSTYPE_SDSP_IMM (ival);
+ auto offset = int{EXTRACT_CSSTYPE_SDSP_IMM (ival)};
return !read_reg (regcache, RISCV_SP_REGNUM, addr)
|| !save_mem (addr + offset, 8) || set_ordinary_record_type ();
}
if (is_c_swsp_insn (ival) || (xlen == 4 && is_c_fswsp_insn (ival)))
{
- int offset = EXTRACT_CSSTYPE_SWSP_IMM (ival);
+ auto offset = int{EXTRACT_CSSTYPE_SWSP_IMM (ival)};
return !read_reg (regcache, RISCV_SP_REGNUM, addr)
|| !save_mem (addr + offset, 4) || set_ordinary_record_type ();
}
@@ -5403,7 +5365,10 @@ class riscv_recorded_insn final
bool
record (gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr) noexcept
{
- int m_length = 0;
+ gdb_assert (gdbarch != nullptr);
+ gdb_assert (regcache != nullptr);
+
+ auto m_length = int{};
auto ival = riscv_insn::fetch_instruction (gdbarch, addr, &m_length);
if (!save_reg (RISCV_PC_REGNUM))
return false;
@@ -5458,9 +5423,10 @@ static int
riscv_make_record_process (struct gdbarch *gdbarch, struct regcache *regcache,
const riscv_recorded_insn &insn)
{
- gdb_assert (gdbarch && regcache);
+ gdb_assert (gdbarch != nullptr);
+ gdb_assert (regcache != nullptr);
- riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
+ auto tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
auto regs_begin = insn.regs_begin ();
auto regs_end = insn.regs_end ();
if (std::any_of (regs_begin, regs_end, [®cache] (auto &®_it) {
@@ -5487,11 +5453,9 @@ riscv_make_record_process (struct gdbarch *gdbarch, struct regcache *regcache,
warning (_ ("Syscall record is not supported"));
return -1;
}
- ULONGEST reg_val = 0;
+ auto reg_val = ULONGEST{};
if (!try_read (regcache, RISCV_A7_REGNUM, reg_val))
- {
- return -1;
- }
+ return -1;
return tdep->riscv_syscall_record (regcache, reg_val);
}
@@ -5508,7 +5472,8 @@ int
riscv_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
CORE_ADDR addr)
{
- gdb_assert (gdbarch && regcache);
+ gdb_assert (gdbarch != nullptr);
+ gdb_assert (regcache != nullptr);
riscv_recorded_insn insn;
if (!insn.record (gdbarch, regcache, addr))
@@ -5520,9 +5485,7 @@ riscv_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
auto ret_val = riscv_make_record_process (gdbarch, regcache, insn);
if (record_full_arch_list_add_end ())
- {
- return -1;
- }
+ return -1;
return ret_val;
}