mirror of
https://github.com/AntKrotov/oberon-07-compiler.git
synced 2026-10-05 09:45:47 +00:00
добавлен параметр -fa <size> (выравнивание секций PE)
This commit is contained in:
1 parent
7a04b38ecd
commit
38b630e2d4
12 files changed
+25
-11
No files matched your search
Binary file not shown.
+1
-1
@@ -1,2 +1,2 @@
|
||||
Compiler.exe source\Compiler.ob07 win32con -out bin\Compiler32.exe -stk 2
|
||||
Compiler.exe source\Compiler.ob07 win32con -out bin\Compiler32.exe -stk 2 -fa 512
|
||||
@pause
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
Compiler.exe source\Compiler.ob07 win64con -out bin\Compiler.exe -stk 2
|
||||
Compiler.exe source\Compiler.ob07 win64con -out bin\Compiler.exe -stk 2 -fa 512
|
||||
@pause
|
||||
@@ -34,6 +34,8 @@ UTF-8 с BOM-сигнатурой.
|
||||
-def <имя> задать символ условной компиляции
|
||||
-ver <major.minor> версия программы (только для kosdll)
|
||||
-uses вывести список импортированных модулей
|
||||
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
|
||||
512, 1024, 2048, 4096. По умолчанию - 512
|
||||
|
||||
параметр -nochk задается в виде строки из символов:
|
||||
"p" - указатели
|
||||
|
||||
@@ -31,6 +31,8 @@ UTF-8 с BOM-сигнатурой.
|
||||
идентификаторов
|
||||
-def <имя> задать символ условной компиляции
|
||||
-uses вывести список импортированных модулей
|
||||
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
|
||||
512, 1024, 2048, 4096. По умолчанию - 512
|
||||
|
||||
параметр -nochk задается в виде строки из символов:
|
||||
"p" - указатели
|
||||
|
||||
+1
-1
@@ -2414,7 +2414,7 @@ BEGIN
|
||||
|
||||
BIN.fixup(prog);
|
||||
IF TARGETS.OS = TARGETS.osWIN64 THEN
|
||||
PE32.write(prog, outname, target = TARGETS.Win64C, target = TARGETS.Win64DLL, TRUE)
|
||||
PE32.write(prog, outname, target = TARGETS.Win64C, target = TARGETS.Win64DLL, TRUE, options.PE32FileAlignment)
|
||||
ELSIF TARGETS.OS = TARGETS.osLINUX64 THEN
|
||||
ELF.write(prog, outname, sofinit, target = TARGETS.Linux64SO, TRUE)
|
||||
END
|
||||
|
||||
@@ -66,6 +66,9 @@ BEGIN
|
||||
DEC(i)
|
||||
END
|
||||
|
||||
ELSIF param = "-fa" THEN
|
||||
getVal(i, options.PE32FileAlignment)
|
||||
|
||||
ELSIF param = "-out" THEN
|
||||
INC(i);
|
||||
UTILS.GetArg(i, param);
|
||||
@@ -255,6 +258,7 @@ BEGIN
|
||||
C.StringLn(" -rom <size> set size of ROM in bytes (MSP430) or Kbytes (STM32)"); C.Ln;
|
||||
C.StringLn(" -tab <width> set width for tabs"); C.Ln;
|
||||
C.StringLn(" -uses list imported modules"); C.Ln;
|
||||
C.StringLn(" -fa <size> set PE32 file alignment {512 (def.), 1024, 2048, 4096}"); C.Ln;
|
||||
UTILS.Exit(0)
|
||||
END;
|
||||
|
||||
|
||||
+10
-4
@@ -1,7 +1,7 @@
|
||||
(*
|
||||
BSD 2-Clause License
|
||||
|
||||
Copyright (c) 2018-2020, Anton Krotov
|
||||
Copyright (c) 2018-2020, 2023, Anton Krotov
|
||||
All rights reserved.
|
||||
*)
|
||||
|
||||
@@ -32,7 +32,6 @@ CONST
|
||||
SHC_bss = 0C0000080H;
|
||||
|
||||
SectionAlignment = 1000H;
|
||||
FileAlignment = 200H;
|
||||
|
||||
|
||||
TYPE
|
||||
@@ -155,6 +154,7 @@ VAR
|
||||
SectionHeaders: ARRAY 16 OF IMAGE_SECTION_HEADER;
|
||||
libcnt: INTEGER;
|
||||
SizeOfWord: INTEGER;
|
||||
FileAlignment: INTEGER;
|
||||
|
||||
|
||||
PROCEDURE Export (program: BIN.PROGRAM; name: INTEGER; VAR ExportDir: IMAGE_EXPORT_DIRECTORY): INTEGER;
|
||||
@@ -348,7 +348,7 @@ BEGIN
|
||||
END WriteFileHeader;
|
||||
|
||||
|
||||
PROCEDURE write* (program: BIN.PROGRAM; FileName: ARRAY OF CHAR; console, dll, amd64: BOOLEAN);
|
||||
PROCEDURE write* (program: BIN.PROGRAM; FileName: ARRAY OF CHAR; console, dll, amd64: BOOLEAN; fa: INTEGER);
|
||||
VAR
|
||||
i, n, temp: INTEGER;
|
||||
|
||||
@@ -465,6 +465,12 @@ VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
IF (fa = 512) OR (fa = 1024) OR (fa = 2048) OR (fa = 4096) THEN
|
||||
FileAlignment := fa
|
||||
ELSE
|
||||
FileAlignment := 512
|
||||
END;
|
||||
|
||||
SizeOfWord := SIZE_OF_DWORD * (ORD(amd64) + 1);
|
||||
|
||||
Size.Code := CHL.Length(program.code);
|
||||
@@ -516,7 +522,7 @@ BEGIN
|
||||
OptionalHeader.MinorSubsystemVersion := 0X;
|
||||
OptionalHeader.Win32VersionValue := 0H;
|
||||
OptionalHeader.SizeOfImage := SectionAlignment;
|
||||
OptionalHeader.SizeOfHeaders := 400H;
|
||||
OptionalHeader.SizeOfHeaders := MAX(FileAlignment, 1024);
|
||||
OptionalHeader.CheckSum := 0;
|
||||
OptionalHeader.Subsystem := WCHR((2 + ORD(console)) * ORD(~dll));
|
||||
OptionalHeader.DllCharacteristics := 0040X;
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ TYPE
|
||||
|
||||
OPTIONS* = RECORD
|
||||
|
||||
version*, stack*, ram*, rom*, tab*: INTEGER;
|
||||
version*, stack*, ram*, rom*, tab*, PE32FileAlignment*: INTEGER;
|
||||
pic*, lower*, uses*: BOOLEAN;
|
||||
checking*: SET
|
||||
|
||||
|
||||
+2
-2
@@ -23,8 +23,8 @@ CONST
|
||||
max32* = 2147483647;
|
||||
|
||||
vMajor* = 1;
|
||||
vMinor* = 64;
|
||||
Date* = "22-jan-2023";
|
||||
vMinor* = 65;
|
||||
Date* = "04-feb-2023";
|
||||
|
||||
FILE_EXT* = ".ob07";
|
||||
RTL_NAME* = "RTL";
|
||||
|
||||
+1
-1
@@ -2486,7 +2486,7 @@ BEGIN
|
||||
|
||||
BIN.fixup(program);
|
||||
IF TARGETS.OS = TARGETS.osWIN32 THEN
|
||||
PE32.write(program, outname, target = TARGETS.Win32C, target = TARGETS.Win32DLL, FALSE)
|
||||
PE32.write(program, outname, target = TARGETS.Win32C, target = TARGETS.Win32DLL, FALSE, opt.PE32FileAlignment)
|
||||
ELSIF target = TARGETS.KolibriOS THEN
|
||||
KOS.write(program, outname)
|
||||
ELSIF target = TARGETS.KolibriOSDLL THEN
|
||||
|
||||
Reference in new issue
Block a user