Hi,I don't think we are too far from real M1 code generation. We need to fix 
some relocation cases (something I don't know how to do).
C.



 Le : 13 juillet 2021 à 16:28 (GMT +02:00)
De : "Ivan Medoedov" <ivan.medoe...@gmail.com>
À : "tinycc-devel@nongnu.org" <tinycc-devel@nongnu.org>
Objet : Re: [Tinycc-devel] Linking system dylibs on macOS 11+


Thank you for working on this, Christian!
By the way, tcc has great support of arm64 and mach-o, so I assume in the near 
future it'll be possible to generate arm64 bins on M1?
Or are there some weird things apple changed in arm64 mac-o bins?
On Thu, Jul 8, 2021 at 10:42 AM Christian Jullien <eli...@orange.fr> 
wrote:
I’ve just pushed a patch so that configure now detects Darwin/arm64 and force a 
x86_64 build on this platform.  From: Tinycc-devel 
[mailto:tinycc-devel-bounces+eligis=orange...@nongnu.org] On Behalf Of 
Christian Jullien
Sent: Thursday, July 08, 2021 08:51
To: tinycc-devel@nongnu.org
Subject: Re: [Tinycc-devel] Linking system dylibs on macOS 11+ Hi, I 
get the two warnings with gcc, not with clang:./configure --cc=gcc 
--cpu=x86_64…gcc -o tccmacho.o -c tccmacho.c 
-DCONFIG_USR_INCLUDE="\"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include\""
 -DTCC_TARGET_X86_64 -DTCC_TARGET_MACHO        -DONE_SOURCE=0 
-Wall -O2 -Wdeclaration-after-statement -fno-strict-aliasing -Wno-pointer-sign 
-Wno-sign-compare -Wno-unused-result -Wno-format-truncation -I.In file included 
from 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/string.h:194, 
                from tcc.h:35,    
             from tccmacho.c:18:tccmacho.c: In 
function 'add_segment':tccmacho.c:265:5: warning: '__builtin_strncpy' specified 
bound 16 equals destination size [-Wstringop-truncation]  265 |   
  strncpy(sc->segname, name, 16);      |     
^~~~~~~In function 'add_section',    inlined from 'collect_sections' 
at tccmacho.c:649:22,    inlined from 'macho_output_file' at 
tccmacho.c:812:9:tccmacho.c:285:5: warning: '__builtin_strncpy' specified bound 
16 equals destination size [-Wstringop-truncation]  285 |     
strncpy(sec->sectname, name, 16);      |     
^~~~~~~ Are you on Big Sur M1 (= aarch64) or Big Sur Intel? Rosetta comes 
only with M1 and it translates Intel code to Aarch64 on the fly. My 
previous attempt to build tcc on M1 was in fact to build a M1 (Aarch64) binary 
cross-compiler for x86_64. This way, tcc is a native binary on M1 which produce 
x86_64 user code translated by Rosetta (on a M1) to produce a workable 
program.Most (not to say about all) test fails. I get a much better result 
if I compile tcc as native x86_64 binary using:./configure 
--extra-cflags="-arch x86_64" --extra-ldflags="-arch x86_64" 
--cpu=x86_64 Make test gives NO error at all!!!! To summarize:On Big 
Sur Intel, I recommend ./configure; makeOn Big Sur M1, I recommend ./configure 
--extra-cflags="-arch x86_64" --extra-ldflags="-arch x86_64" 
--cpu=x86_64 I’ll try to make the later options the ./configure default on 
M1. Many thanks all to make M1 support happen. C. From: 
Tinycc-devel [mailto:tinycc-devel-bounces+eligis=orange...@nongnu.org] On 
Behalf Of Sushant Pandurangi
Sent: Wednesday, July 07, 2021 21:41
To: tinycc-devel@nongnu.org
Subject: Re: [Tinycc-devel] Linking system dylibs on macOS 11+ Hello 
Christian, Thanks for the Windows patches and the long double fix. To 
clarify about tcc -run, I'm not using --cpu=x86-64 at all, I am on a fresh M1 
and Rosetta is not even installed. Here, `tcc -run` starts running main() and 
very simple stuff (like Hello World) works already. On the other hand in a 
cross-compiler config, I wonder if tcc -run can work at all -- not unless 
Rosetta can do in-memory translation of the JIT'd x86-64 code. The 2 
warnings at tccmacho.c:265/285 -- those are not from my code, did they show up 
only after my patch? I wonder why. I'm not familiar with that function and 
probably not the best person to make a fix. To Herman, thanks a lot for 
catching the memcheck issues. Regards,Sushant Date: Wed, 7 Jul 2021 
07:55:41 +0200
From: "Christian Jullien" <eli...@orange.fr>
To: <tinycc-devel@nongnu.org>
Subject: Re: [Tinycc-devel] Linking system dylibs on macOS 11+
Message-ID: <000301d772f4$b88cf070$29a6d150$@orange.fr>
Content-Type: text/plain;        charset="utf-8"

Hello Sushant,

Your pushed patch works at 99%.

--- The details:

there are few warnings:

tccmacho.c: In function 'add_segment':
tccmacho.c:265:5: warning: '__builtin_strncpy' specified bound 16 equals 
destination size [-Wstringop-truncation]
 265 |     strncpy(sc->segname, name, 16);
     |     ^~~~~~~
In function 'add_section',
   inlined from 'collect_sections' at tccmacho.c:649:22,
   inlined from 'macho_output_file' at tccmacho.c:812:9:
tccmacho.c:285:5: warning: '__builtin_strncpy' specified bound 16 equals 
destination size [-Wstringop-truncation]
 285 |     strncpy(sec->sectname, name, 16);
     |     ^~~~~~~

--- More annoying.

BUG1: tcc -run fails because it is not supported by cross-compiler. IMHO, on 
macOS --cpu should not be considered as cross-compiler
------------ hello-run ------------
tcc: error: -run is not available in a cross compiler
If I remove this test:
#ifndef TCC_IS_NATIVE
           tcc_error("-run is not available in a 
cross compiler");
#endif

It fails with
------------ libtest ------------
dyld: lazy symbol binding failed: Symbol not found: _tcc_relocate
 Referenced from: /Users/jullien/tinycc/tests/./libtcc_test
 Expected in: flat namespace

dyld: Symbol not found: _tcc_relocate
 Referenced from: /Users/jullien/tinycc/tests/./libtcc_test
 Expected in: flat namespace

BUG2: When compiled tcc with ./configure --cpu=x86_64
Generated code is considered as a cross-compiler.
Then, when I use a long double in my code, it reaches tccgen.c(8087): 
tcc_error("can't cross compile long double constants");

In this specific case, both double and long double are 8 bytes but LDOUBLE_SIZE 
== 16

I tried this patch which seems to solve this issues. Maintainers, is it the 
right patch? Do you allow me to push it on mod?
If you prefer, I can surround it with #ifdef TCC_TARGET_MACHO

jullien@mobley:~/tinycc $ git diff
diff --git a/tccgen.c b/tccgen.c
index c36032a..425a001 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -8088,10 +8088,10 @@ static void init_putv(init_params *p, CType *type, 
unsigned long c)
#endif
                /* For other platforms 
it should work natively, but may not work
                   for cross 
compilers */
-                if (sizeof(long double) == 
LDOUBLE_SIZE)
-                    memcpy(ptr, 
&vtop->c.ld, LDOUBLE_SIZE);
-                else if (sizeof(double) == 
LDOUBLE_SIZE)
-                    memcpy(ptr, 
&vtop->c.ld, LDOUBLE_SIZE);
+                if (sizeof(long double) 
<= LDOUBLE_SIZE)
+                    memcpy(ptr, 
&vtop->c.ld, sizeof(long double));
+                else if (sizeof(double) 
<= LDOUBLE_SIZE)
+                    memcpy(ptr, 
&vtop->c.ld, sizeof(double));
#ifndef TCC_CROSS_TEST
                else
                    
tcc_error("can't cross compile long double 
constants"); _______________________________________________

Tinycc-devel mailing list

Tinycc-devel@nongnu.org

https://lists.nongnu.org/mailman/listinfo/tinycc-devel





_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to