On Mon, Jul 20, 2020 at 1:40 PM Mahdi Hosseini <m.hosein...@gmail.com> wrote:
>
> Thanks that was a valuable information. It might be the debugging flag that 
> caused the issue. I debugged the cgo file and found that in char* mached with 
> dwarf.UcharType instead of dwarf.chatType

I think that that in itself shouldn't matter, the question is what is
the DW_AT_name attribute of the unsigned character type.

Ian

> On Monday, July 20, 2020 at 3:45:00 PM UTC-4, Ian Lance Taylor wrote:
>>
>> On Mon, Jul 20, 2020 at 12:28 PM Mahdi Hosseini <m.ho...@gmail.com> wrote:
>> >
>> > Hi,
>> > I try to recompile Go for a new platform which is a s390x platform using 
>> > Clang instead of GCC. I can not work for C string in CGO. Apparently char 
>> > in unsigned by default on my platform and building even the simple CGO 
>> > program always fails with this error:
>> >
>> > /home/user/tmp/go-build468743286/b001/_cgo_gotypes.go:175:25: undefined: 
>> > _Ctype_char
>> >
>> > the code is:
>> >
>> > package main
>> >
>> > //#include <stdio.h>
>> > //char* callC() {
>> > // return "Calling C code!";
>> > //}
>> > import "C"
>> >
>> > import "fmt"
>> >
>> > func main() {
>> >         fmt.Println("Convert C String to Go String")
>> >         str := C.GoString(C.callC())
>> >         fmt.Println(str)
>> > }
>> >
>> > to overcome this I modified the gcc.go file in src/cmd/cgo and added this:
>> >
>> > if s == "uchar" {
>> >                 s = "char"
>> >             }
>> >             name := c.Ident("_Ctype_" + s)
>> > I don't now how CGO always convert my char* to *_Ctype_uchar instead of 
>> > *_Ctype_char.
>> > Anyone have a clue on this?
>>
>> cgo is just using the debug information generated by the C compiler.
>> It expects to see debug info for the type "char".  For example, if I
>> compile this C file
>>
>> #include <stdio.h>
>> char* callC() {
>>  return "Calling C code!";
>> }
>>
>> with clang on my system and run "readelf --debug" on the resulting
>> object file, I see
>>
>>  <1><48>: Abbrev Number: 4 (DW_TAG_base_type)
>>     <49>   DW_AT_name        : (indirect string, offset: 0x4c): char
>>     <4d>   DW_AT_encoding    : 6        (signed char)
>>     <4e>   DW_AT_byte_size   : 1
>>
>> cgo will use this to define the type "C.char".
>>
>> This is independent of whether char is signed or unsigned.  Given that
>> your code uses "char", it surprises me that there is no named entry
>> for it in the debug info.
>>
>> Ian
>
> --
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/f4a72340-018e-4172-b702-af4f03ad48f1o%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcXYNDDuX5hhxyQfJwXg_Nvd3X4j8hduj8NJ6ZVnt1w4Cg%40mail.gmail.com.

Reply via email to