I am writing a compiler targeting the common intermediate language and want to use .data-declarations for globals. I mean section II.16.3.1 of the Spec.
How can I use what is described as "Address of label"? The following does assemble using .NET-Core's ilasm:
.assembly extern mscorlib
{
.ver 4:0:0:0
}
.assembly 'string'
{
}
.module 'string'
.data hello_world_data = { int8(72), int8(101), int8(108), int8(108), int8(111), int8(32), int8(87), int8(111), int8(114), int8(108), int8(100), int8(33), int8(0) }
.field static int8 hello_world at hello_world_data
.data addr_of_data = &(hello_world_data)
.field static int8* hello_world_ptr at addr_of_data
.method public static default int32 main () cil managed {
.entrypoint
ldc.i4.0
ret
}
But when I try to execute the code above, I get the following error message (using .NET-Core on Linux):
Unhandled exception. System.BadImageFormatException: Could not load file or assembly '/home/lou/uni/proj/stuff/tests/test-global-arrays/string.exe'. An attempt was made to load a program with an incorrect format.
File name: '/home/lou/uni/proj/stuff/tests/test-global-arrays/string.exe'
[1] 12019 abort (core dumped) dotnet string.exe
Any ideas/help?