public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
@ 2023-09-05 19:35 Roland McGrath
  2023-09-06 21:01 ` Cary Coutant
  2023-09-12 12:37 ` Vaseeharan Vinayagamoorthy
  0 siblings, 2 replies; 7+ messages in thread
From: Roland McGrath @ 2023-09-05 19:35 UTC (permalink / raw)
  To: Binutils

The std::basic_string template type is only specified for
instantiations using character types.  Newer (LLVM) libc++
implementations no longer allow non-character integer types
to be used.

Ok for trunk?

Thanks,
Roland

diff --git a/gold/merge.cc b/gold/merge.cc
index c12efc9905e..ce31a792443 100644
--- a/gold/merge.cc
+++ b/gold/merge.cc
@@ -665,10 +665,10 @@ template
 class Output_merge_string<char>;

 template
-class Output_merge_string<uint16_t>;
+class Output_merge_string<char16_t>;

 template
-class Output_merge_string<uint32_t>;
+class Output_merge_string<char32_t>;

 #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
 template
diff --git a/gold/output.cc b/gold/output.cc
index a1978eb5f32..6053e4db33d 100644
--- a/gold/output.cc
+++ b/gold/output.cc
@@ -29,6 +29,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <algorithm>
+#include <uchar.h>

 #ifdef HAVE_SYS_MMAN_H
 #include <sys/mman.h>
@@ -2706,10 +2707,10 @@
Output_section::add_merge_input_section(Relobj* object, unsigned int
shndx,
              pomb = new Output_merge_string<char>(addralign);
              break;
            case 2:
-             pomb = new Output_merge_string<uint16_t>(addralign);
+             pomb = new Output_merge_string<char16_t>(addralign);
              break;
            case 4:
-             pomb = new Output_merge_string<uint32_t>(addralign);
+             pomb = new Output_merge_string<char32_t>(addralign);
              break;
            default:
              return false;
diff --git a/gold/stringpool.cc b/gold/stringpool.cc
index a2cd44d5244..b5ac1dd34ca 100644
--- a/gold/stringpool.cc
+++ b/gold/stringpool.cc
@@ -25,6 +25,7 @@
 #include <cstring>
 #include <algorithm>
 #include <vector>
+#include <uchar.h>

 #include "output.h"
 #include "parameters.h"
@@ -527,9 +528,9 @@ template
 class Stringpool_template<char>;

 template
-class Stringpool_template<uint16_t>;
+class Stringpool_template<char16_t>;

 template
-class Stringpool_template<uint32_t>;
+class Stringpool_template<char32_t>;

 } // End namespace gold.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
  2023-09-05 19:35 [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types Roland McGrath
@ 2023-09-06 21:01 ` Cary Coutant
  2023-09-07  0:22   ` Roland McGrath
  2023-09-12 12:37 ` Vaseeharan Vinayagamoorthy
  1 sibling, 1 reply; 7+ messages in thread
From: Cary Coutant @ 2023-09-06 21:01 UTC (permalink / raw)
  To: Roland McGrath; +Cc: Binutils

> The std::basic_string template type is only specified for
> instantiations using character types.  Newer (LLVM) libc++
> implementations no longer allow non-character integer types
> to be used.
>
> Ok for trunk?

LGTM. Thanks!

-cary

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
  2023-09-06 21:01 ` Cary Coutant
@ 2023-09-07  0:22   ` Roland McGrath
  0 siblings, 0 replies; 7+ messages in thread
From: Roland McGrath @ 2023-09-07  0:22 UTC (permalink / raw)
  To: Cary Coutant; +Cc: Binutils

[-- Attachment #1: Type: text/plain, Size: 27 bytes --]

Committed.

Thanks,
Roland

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
  2023-09-05 19:35 [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types Roland McGrath
  2023-09-06 21:01 ` Cary Coutant
@ 2023-09-12 12:37 ` Vaseeharan Vinayagamoorthy
  2023-09-20  0:41   ` Roland McGrath
  1 sibling, 1 reply; 7+ messages in thread
From: Vaseeharan Vinayagamoorthy @ 2023-09-12 12:37 UTC (permalink / raw)
  To: Binutils, Roland McGrath; +Cc: Vaseeharan Vinayagamoorthy

[-- Attachment #1: Type: text/plain, Size: 3487 bytes --]

Hello,


This patch has started causing errors in our builds, using GCC 4.8.5.
This is affecting our cross builds of these targets:
aarch64_be_none_linux_gnu
aarch64_none_linux_gnu
arm_none_linux_gnueabi
arm_none_linux_gnueabihf


The errors are:


/…/src/binutils-gdb/gold/merge.cc:668:27: error: ‘char16_t’ was not declared in this scope


 class Output_merge_string<char16_t>;


                           ^


/…/src/binutils-gdb/gold/merge.cc:668:35: error: template argument 1 is invalid


 class Output_merge_string<char16_t>;


                                   ^


/…/src/binutils-gdb/gold/merge.cc:671:27: error: ‘char32_t’ was not declared in this scope


 class Output_merge_string<char32_t>;


                           ^


/…/src/binutils-gdb/gold/merge.cc:671:35: error: template argument 1 is invalid


 class Output_merge_string<char32_t>;


                                   ^


Kind regards,
Vasee



________________________________
From: Binutils <binutils-bounces+vvinayag=arm.com@sourceware.org> on behalf of Roland McGrath via Binutils <binutils@sourceware.org>
Sent: 05 September 2023 20:35
To: Binutils <binutils@sourceware.org>
Subject: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types

The std::basic_string template type is only specified for
instantiations using character types.  Newer (LLVM) libc++
implementations no longer allow non-character integer types
to be used.

Ok for trunk?

Thanks,
Roland

diff --git a/gold/merge.cc b/gold/merge.cc
index c12efc9905e..ce31a792443 100644
--- a/gold/merge.cc
+++ b/gold/merge.cc
@@ -665,10 +665,10 @@ template
 class Output_merge_string<char>;

 template
-class Output_merge_string<uint16_t>;
+class Output_merge_string<char16_t>;

 template
-class Output_merge_string<uint32_t>;
+class Output_merge_string<char32_t>;

 #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
 template
diff --git a/gold/output.cc b/gold/output.cc
index a1978eb5f32..6053e4db33d 100644
--- a/gold/output.cc
+++ b/gold/output.cc
@@ -29,6 +29,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <algorithm>
+#include <uchar.h>

 #ifdef HAVE_SYS_MMAN_H
 #include <sys/mman.h>
@@ -2706,10 +2707,10 @@
Output_section::add_merge_input_section(Relobj* object, unsigned int
shndx,
              pomb = new Output_merge_string<char>(addralign);
              break;
            case 2:
-             pomb = new Output_merge_string<uint16_t>(addralign);
+             pomb = new Output_merge_string<char16_t>(addralign);
              break;
            case 4:
-             pomb = new Output_merge_string<uint32_t>(addralign);
+             pomb = new Output_merge_string<char32_t>(addralign);
              break;
            default:
              return false;
diff --git a/gold/stringpool.cc b/gold/stringpool.cc
index a2cd44d5244..b5ac1dd34ca 100644
--- a/gold/stringpool.cc
+++ b/gold/stringpool.cc
@@ -25,6 +25,7 @@
 #include <cstring>
 #include <algorithm>
 #include <vector>
+#include <uchar.h>

 #include "output.h"
 #include "parameters.h"
@@ -527,9 +528,9 @@ template
 class Stringpool_template<char>;

 template
-class Stringpool_template<uint16_t>;
+class Stringpool_template<char16_t>;

 template
-class Stringpool_template<uint32_t>;
+class Stringpool_template<char32_t>;

 } // End namespace gold.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
  2023-09-12 12:37 ` Vaseeharan Vinayagamoorthy
@ 2023-09-20  0:41   ` Roland McGrath
  2023-10-19 11:07     ` Vaseeharan Vinayagamoorthy
  0 siblings, 1 reply; 7+ messages in thread
From: Roland McGrath @ 2023-09-20  0:41 UTC (permalink / raw)
  To: Vaseeharan Vinayagamoorthy; +Cc: Binutils

I didn't realize that building gold with compilers so old they don't
support C++11 was supported.  The GCC source history suggests that
char16_t and char32_t support were introduced in GCC 4.4.  I'm not
sure when the default C++ mode was changed to be >= -std=c++11.  It
looks to me that the configure stuff should be making it pass
`-std=c++11` if that's required, but I don't know how that test is
coming out in your build.  I wonder if using `CXX=g++ -std=c++11`
makes a difference with your version.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
  2023-09-20  0:41   ` Roland McGrath
@ 2023-10-19 11:07     ` Vaseeharan Vinayagamoorthy
  2023-10-19 19:30       ` Roland McGrath
  0 siblings, 1 reply; 7+ messages in thread
From: Vaseeharan Vinayagamoorthy @ 2023-10-19 11:07 UTC (permalink / raw)
  To: Roland McGrath; +Cc: Binutils, Vaseeharan Vinayagamoorthy

[-- Attachment #1: Type: text/plain, Size: 1141 bytes --]

Hi,

Sorry for the delayed response.
Using -std=gnu++11 in our build scripts when building binutils does fix the issue for us, as mentioned in https://sourceware.org/bugzilla/show_bug.cgi?id=30867 .
However, does this need fixing in configure.ac instead?

Kind regards,
Vasee
________________________________
From: Roland McGrath <mcgrathr@google.com>
Sent: 20 September 2023 01:41
To: Vaseeharan Vinayagamoorthy <Vaseeharan.Vinayagamoorthy@arm.com>
Cc: Binutils <binutils@sourceware.org>
Subject: Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types

I didn't realize that building gold with compilers so old they don't
support C++11 was supported.  The GCC source history suggests that
char16_t and char32_t support were introduced in GCC 4.4.  I'm not
sure when the default C++ mode was changed to be >= -std=c++11.  It
looks to me that the configure stuff should be making it pass
`-std=c++11` if that's required, but I don't know how that test is
coming out in your build.  I wonder if using `CXX=g++ -std=c++11`
makes a difference with your version.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
  2023-10-19 11:07     ` Vaseeharan Vinayagamoorthy
@ 2023-10-19 19:30       ` Roland McGrath
  0 siblings, 0 replies; 7+ messages in thread
From: Roland McGrath @ 2023-10-19 19:30 UTC (permalink / raw)
  To: Vaseeharan Vinayagamoorthy; +Cc: Binutils

The top-level configure already uses AX_CXX_COMPILE_STDCXX(11), which
should ensure `-std=c++11` is added if needed.  Perhaps either that
check is not having the result that it should in your configuration,
or the flags it sets are not being properly plumbed down to the
subdirectory configure/makefile flags.  For example, gdb/configure.ac
also does this itself and I'm not sure if that means that each
subdirectory configure.ac needs it as well. It seems likely that we
now need to change the invocation to be AX_CXX_COMPILE_STDCXX(11, ,
mandatory) as gdb/configure.ac does.

On Thu, Oct 19, 2023 at 4:08 AM Vaseeharan Vinayagamoorthy
<Vaseeharan.Vinayagamoorthy@arm.com> wrote:
>
> Hi,
>
> Sorry for the delayed response.
> Using -std=gnu++11 in our build scripts when building binutils does fix the issue for us, as mentioned in https://sourceware.org/bugzilla/show_bug.cgi?id=30867 .
> However, does this need fixing in configure.ac instead?
>
> Kind regards,
> Vasee
> ________________________________
> From: Roland McGrath <mcgrathr@google.com>
> Sent: 20 September 2023 01:41
> To: Vaseeharan Vinayagamoorthy <Vaseeharan.Vinayagamoorthy@arm.com>
> Cc: Binutils <binutils@sourceware.org>
> Subject: Re: [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types
>
> I didn't realize that building gold with compilers so old they don't
> support C++11 was supported.  The GCC source history suggests that
> char16_t and char32_t support were introduced in GCC 4.4.  I'm not
> sure when the default C++ mode was changed to be >= -std=c++11.  It
> looks to me that the configure stuff should be making it pass
> `-std=c++11` if that's required, but I don't know how that test is
> coming out in your build.  I wonder if using `CXX=g++ -std=c++11`
> makes a difference with your version.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-10-19 19:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-05 19:35 [PATCH users/roland/gold-charnn] gold: Use char16_t, char32_t instead of uint16_t, uint32_t as character types Roland McGrath
2023-09-06 21:01 ` Cary Coutant
2023-09-07  0:22   ` Roland McGrath
2023-09-12 12:37 ` Vaseeharan Vinayagamoorthy
2023-09-20  0:41   ` Roland McGrath
2023-10-19 11:07     ` Vaseeharan Vinayagamoorthy
2023-10-19 19:30       ` Roland McGrath

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).