[fpc-devel] Windows 64 for amd

Giulio BERNA ugilio at hotmail.com
Fri Sep 2 17:59:25 CEST 2005


>Well, as already pointed out in the wiki talk page, the problem for a 
>usable
>port is a good assembler/linker/debugger tool chain.
>
Yes, I sent this mail yesterday after writing wiki, but mailing list seemed 
to have problems since message arrived only today. You saw wiki before my 
mail arrived (hehe, I wasn't aware of "Recent changes" link in wiki :P )
Since mailing list seems to work now I'll write here instead of writing on 
the wiki talk page.

I played a little and discovered that you were right, ml64 isn't used at all 
by cl, it uses an internal assembler (nothing illegal: i simpy replaced ml64 
with a program that would display command line arguments, but cl didn't call 
it).

There is free edition of visual c++ 2005 (visual c++ 2005 express edition) 
but it does not include ml64, so I think that the "working" one is in full 
edition of visual c++ 2005, which costs a lot of money and is not available 
for free (you must pay something and subscribe to some microsoft thing and 
then you can download the beta).
So, very bad news from ml64 side.

Well, there is yasm. It should be a nasm-compatible assembler with x86-64 
support (and also support for pe+ files, so currently you can make programs 
for win64 with it).

In fpc there is nasm output syntax, so it can be upgraded to handle 64 bit 
syntax.
Bad news: yasm is very young and is not considered to be stable at all, so 
neither this option seems to be usable :\

However, I understand that nothing official and usable can be made before 
binutils and gdb are ported on win64, so I tried to focus on what could be 
done that can be used later without "losing time" with temporary hacks.
So I still haven't understood a couple of things (I'm ignorant on fpc 
internals :P ), tell me if I am wrong:
- calling convention is now well defined. I thought it could be developed 
and tested on linux-x86_64.
I mean, it can be tested and debugged writing pascal code like:

function letstry(various arguments); 
whateverthiscallingconventionwillbenamed;

...

letstry(various arguments);

This should allow testing of calling convention mechanism.

- binary writer thing: it exists for i386, in todo for 2.2 there is a 
"Internal assembler for non-x86 platforms" line.
So binary writer for x86_64 is something from which today platforms (linux 
and bsd for x86_64) could benefit, regardless of win64 port.
I thought that a binary writer is almost identical on various targets that 
run on the same architechture (machine code is the same, even if it's put in 
different places in elf64 files or pe+ files, but that shouldn't be a big 
issue) so once written and tested on x86_64 linux it should be ready for 
win64 without a lot of additional testing.

I thought that these things could be made regardless to toolchains available 
for win64. This will not lead to a working win64 port since debugging 
support is still missing, but it can be a big step forward while waiting for 
binutils and gdb, and maybe windows rtl could start to be adapted meanwhile.

You wrote:
"Making an internal assembler for FPC wouldn't be that hard but it makes 
debugging harder because source code can't be inlined to have at least some 
kind of source code debugging "
I don't understand: are you talking about debugging win64 programs? Ok, this 
couldn't be done until gdb is ported but I wasn't thinking about this: I 
simply said that it could be a step forward while waiting for gdb to be 
ported.ù

bye
Giulio





More information about the fpc-devel mailing list