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
|
@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
|
@pause
|
||||||
@@ -34,6 +34,8 @@ UTF-8 с BOM-сигнатурой.
|
|||||||
-def <имя> задать символ условной компиляции
|
-def <имя> задать символ условной компиляции
|
||||||
-ver <major.minor> версия программы (только для kosdll)
|
-ver <major.minor> версия программы (только для kosdll)
|
||||||
-uses вывести список импортированных модулей
|
-uses вывести список импортированных модулей
|
||||||
|
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
|
||||||
|
512, 1024, 2048, 4096. По умолчанию - 512
|
||||||
|
|
||||||
параметр -nochk задается в виде строки из символов:
|
параметр -nochk задается в виде строки из символов:
|
||||||
"p" - указатели
|
"p" - указатели
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ UTF-8 с BOM-сигнатурой.
|
|||||||
идентификаторов
|
идентификаторов
|
||||||
-def <имя> задать символ условной компиляции
|
-def <имя> задать символ условной компиляции
|
||||||
-uses вывести список импортированных модулей
|
-uses вывести список импортированных модулей
|
||||||
|
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
|
||||||
|
512, 1024, 2048, 4096. По умолчанию - 512
|
||||||
|
|
||||||
параметр -nochk задается в виде строки из символов:
|
параметр -nochk задается в виде строки из символов:
|
||||||
"p" - указатели
|
"p" - указатели
|
||||||
|
|||||||
+1
-1
@@ -2414,7 +2414,7 @@ BEGIN
|
|||||||
|
|
||||||
BIN.fixup(prog);
|
BIN.fixup(prog);
|
||||||
IF TARGETS.OS = TARGETS.osWIN64 THEN
|
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
|
ELSIF TARGETS.OS = TARGETS.osLINUX64 THEN
|
||||||
ELF.write(prog, outname, sofinit, target = TARGETS.Linux64SO, TRUE)
|
ELF.write(prog, outname, sofinit, target = TARGETS.Linux64SO, TRUE)
|
||||||
END
|
END
|
||||||
|
|||||||
@@ -66,6 +66,9 @@ BEGIN
|
|||||||
DEC(i)
|
DEC(i)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
ELSIF param = "-fa" THEN
|
||||||
|
getVal(i, options.PE32FileAlignment)
|
||||||
|
|
||||||
ELSIF param = "-out" THEN
|
ELSIF param = "-out" THEN
|
||||||
INC(i);
|
INC(i);
|
||||||
UTILS.GetArg(i, param);
|
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(" -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(" -tab <width> set width for tabs"); C.Ln;
|
||||||
C.StringLn(" -uses list imported modules"); 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)
|
UTILS.Exit(0)
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
|||||||
+10
-4
@@ -1,7 +1,7 @@
|
|||||||
(*
|
(*
|
||||||
BSD 2-Clause License
|
BSD 2-Clause License
|
||||||
|
|
||||||
Copyright (c) 2018-2020, Anton Krotov
|
Copyright (c) 2018-2020, 2023, Anton Krotov
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
*)
|
*)
|
||||||
|
|
||||||
@@ -32,7 +32,6 @@ CONST
|
|||||||
SHC_bss = 0C0000080H;
|
SHC_bss = 0C0000080H;
|
||||||
|
|
||||||
SectionAlignment = 1000H;
|
SectionAlignment = 1000H;
|
||||||
FileAlignment = 200H;
|
|
||||||
|
|
||||||
|
|
||||||
TYPE
|
TYPE
|
||||||
@@ -155,6 +154,7 @@ VAR
|
|||||||
SectionHeaders: ARRAY 16 OF IMAGE_SECTION_HEADER;
|
SectionHeaders: ARRAY 16 OF IMAGE_SECTION_HEADER;
|
||||||
libcnt: INTEGER;
|
libcnt: INTEGER;
|
||||||
SizeOfWord: INTEGER;
|
SizeOfWord: INTEGER;
|
||||||
|
FileAlignment: INTEGER;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE Export (program: BIN.PROGRAM; name: INTEGER; VAR ExportDir: IMAGE_EXPORT_DIRECTORY): INTEGER;
|
PROCEDURE Export (program: BIN.PROGRAM; name: INTEGER; VAR ExportDir: IMAGE_EXPORT_DIRECTORY): INTEGER;
|
||||||
@@ -348,7 +348,7 @@ BEGIN
|
|||||||
END WriteFileHeader;
|
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
|
VAR
|
||||||
i, n, temp: INTEGER;
|
i, n, temp: INTEGER;
|
||||||
|
|
||||||
@@ -465,6 +465,12 @@ VAR
|
|||||||
|
|
||||||
|
|
||||||
BEGIN
|
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);
|
SizeOfWord := SIZE_OF_DWORD * (ORD(amd64) + 1);
|
||||||
|
|
||||||
Size.Code := CHL.Length(program.code);
|
Size.Code := CHL.Length(program.code);
|
||||||
@@ -516,7 +522,7 @@ BEGIN
|
|||||||
OptionalHeader.MinorSubsystemVersion := 0X;
|
OptionalHeader.MinorSubsystemVersion := 0X;
|
||||||
OptionalHeader.Win32VersionValue := 0H;
|
OptionalHeader.Win32VersionValue := 0H;
|
||||||
OptionalHeader.SizeOfImage := SectionAlignment;
|
OptionalHeader.SizeOfImage := SectionAlignment;
|
||||||
OptionalHeader.SizeOfHeaders := 400H;
|
OptionalHeader.SizeOfHeaders := MAX(FileAlignment, 1024);
|
||||||
OptionalHeader.CheckSum := 0;
|
OptionalHeader.CheckSum := 0;
|
||||||
OptionalHeader.Subsystem := WCHR((2 + ORD(console)) * ORD(~dll));
|
OptionalHeader.Subsystem := WCHR((2 + ORD(console)) * ORD(~dll));
|
||||||
OptionalHeader.DllCharacteristics := 0040X;
|
OptionalHeader.DllCharacteristics := 0040X;
|
||||||
|
|||||||
+1
-1
@@ -73,7 +73,7 @@ TYPE
|
|||||||
|
|
||||||
OPTIONS* = RECORD
|
OPTIONS* = RECORD
|
||||||
|
|
||||||
version*, stack*, ram*, rom*, tab*: INTEGER;
|
version*, stack*, ram*, rom*, tab*, PE32FileAlignment*: INTEGER;
|
||||||
pic*, lower*, uses*: BOOLEAN;
|
pic*, lower*, uses*: BOOLEAN;
|
||||||
checking*: SET
|
checking*: SET
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -23,8 +23,8 @@ CONST
|
|||||||
max32* = 2147483647;
|
max32* = 2147483647;
|
||||||
|
|
||||||
vMajor* = 1;
|
vMajor* = 1;
|
||||||
vMinor* = 64;
|
vMinor* = 65;
|
||||||
Date* = "22-jan-2023";
|
Date* = "04-feb-2023";
|
||||||
|
|
||||||
FILE_EXT* = ".ob07";
|
FILE_EXT* = ".ob07";
|
||||||
RTL_NAME* = "RTL";
|
RTL_NAME* = "RTL";
|
||||||
|
|||||||
+1
-1
@@ -2486,7 +2486,7 @@ BEGIN
|
|||||||
|
|
||||||
BIN.fixup(program);
|
BIN.fixup(program);
|
||||||
IF TARGETS.OS = TARGETS.osWIN32 THEN
|
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
|
ELSIF target = TARGETS.KolibriOS THEN
|
||||||
KOS.write(program, outname)
|
KOS.write(program, outname)
|
||||||
ELSIF target = TARGETS.KolibriOSDLL THEN
|
ELSIF target = TARGETS.KolibriOSDLL THEN
|
||||||
|
|||||||
Reference in new issue
Block a user