@@ -436,8 +436,7 @@ class X86Assembler {
436
436
m_origin = 0x08048000 ;
437
437
#ifdef LFORTRAN_ASM_PRINT
438
438
if (bits64) {
439
- m_asm_code = " BITS 64\n " ;
440
- emit (" " , " org " + i2s ((uint64_t )m_origin) + " \n " ); // specify origin info
439
+ m_asm_code = " " ;
441
440
} else {
442
441
m_asm_code = " BITS 32\n " ;
443
442
emit (" " , " org " + i2s (m_origin) + " \n " ); // specify origin info
@@ -447,7 +446,86 @@ class X86Assembler {
447
446
448
447
#ifdef LFORTRAN_ASM_PRINT
449
448
std::string get_asm () {
450
- return m_asm_code;
449
+
450
+ std::string header =
451
+ R"( BITS 64
452
+ org )" + i2s ((uint64_t ) m_origin) + R"(
453
+
454
+ ehdr:
455
+ db 0x7f
456
+ db 0x45
457
+ db 0x4c
458
+ db 0x46
459
+ db 0x02
460
+ db 0x01
461
+ db 0x01
462
+ db 0x00
463
+ db 0x00
464
+ db 0x00
465
+ db 0x00
466
+ db 0x00
467
+ db 0x00
468
+ db 0x00
469
+ db 0x00
470
+ db 0x00
471
+ dw 0x0002
472
+ dw 0x003e
473
+ dd 0x00000001
474
+ dq _start
475
+ dq e_phoff
476
+ dq 0x0000000000000000
477
+ dd 0x00000000
478
+ dw ehdrsize
479
+ dw phdrsize
480
+ dw 0x0003
481
+ dw 0x0000
482
+ dw 0x0000
483
+ dw 0x0000
484
+ phdr:
485
+ dd 0x00000001
486
+ dd 0x00000004
487
+ dq header_segment_offset
488
+ dq header_segment_start
489
+ dq header_segment_start
490
+ dq header_segment_size
491
+ dq header_segment_size
492
+ dq 0x0000000000001000
493
+ text_phdr:
494
+ dd 0x00000001
495
+ dd 0x00000005
496
+ dq text_segment_offset
497
+ dq text_segment_start
498
+ dq text_segment_start
499
+ dq text_segment_size
500
+ dq text_segment_size
501
+ dq 0x0000000000001000
502
+ data_phdr:
503
+ dd 0x00000001
504
+ dd 0x00000006
505
+ dq data_segment_offset
506
+ dq data_segment_start
507
+ dq data_segment_start
508
+ dq data_segment_size
509
+ dq data_segment_size
510
+ dq 0x0000000000001000
511
+
512
+ align 4096, db 0
513
+
514
+ )" ;
515
+
516
+ std::string footer = R"(
517
+ ehdrsize equ phdr - ehdr
518
+ phdrsize equ text_phdr - phdr
519
+ e_phoff equ phdr - ehdr
520
+ header_segment_offset equ ehdr - ehdr
521
+ header_segment_start equ ehdr
522
+ header_segment_size equ text_segment_start - ehdr
523
+ text_segment_offset equ text_segment_start - ehdr
524
+ text_segment_size equ text_segment_end - text_segment_start
525
+ data_segment_offset equ data_segment_start - ehdr
526
+ data_segment_size equ data_segment_end - data_segment_start
527
+ )" ;
528
+ return header + m_asm_code + footer;
451
529
}
452
530
453
531
// Saves the generated assembly into a file
0 commit comments