From 75816e87fcad853501cd087b1ca91360438f5ce7 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Tue, 16 Jul 2013 08:05:19 +0200 Subject: [PATCH] add option /LARGEADDRESSAWARE --- common/lnkdat.asm | 1 + common/lnkdat.h | 1 + common/mscmdlinc.c | 67 +++++++++++++++++++++++++--------------------- exe/peendsec.asm | 9 ++++++- 4 files changed, 47 insertions(+), 31 deletions(-) diff --git a/common/lnkdat.asm b/common/lnkdat.asm index 6149356..7476e73 100644 --- a/common/lnkdat.asm +++ b/common/lnkdat.asm @@ -2107,6 +2107,7 @@ DOFLAG PE_SUBSYSTEM_DEFINED DOFLAG PE_SUBSYS_VERSION_DEFINED DOFLAG PE_BASE_SPECIFIED DOFLAG PE_BASE_FIXED +DOFLAG PE_LARGE_ADDRESS_AWARE DOFLAG OUTPUT_PE DOFLAG DOING_tls DOFLAG GOT_tls_CLASS diff --git a/common/lnkdat.h b/common/lnkdat.h index 5d2412e..b296d54 100644 --- a/common/lnkdat.h +++ b/common/lnkdat.h @@ -2213,6 +2213,7 @@ extern unsigned char PE_SUBSYSTEM_DEFINED; extern unsigned char PE_SUBSYS_VERSION_DEFINED; extern unsigned char PE_BASE_SPECIFIED; extern unsigned char PE_BASE_FIXED; +extern unsigned char PE_LARGE_ADDRESS_AWARE; extern unsigned char OUTPUT_PE; extern unsigned char DOING_tls; extern unsigned char GOT_tls_CLASS; diff --git a/common/mscmdlinc.c b/common/mscmdlinc.c index 7346765..f53a215 100644 --- a/common/mscmdlinc.c +++ b/common/mscmdlinc.c @@ -1499,6 +1499,11 @@ void _res_extdictionary() //EXTDICTIONARY_FLAG = 0; } +void _set_largeaddressaware() +{ + PE_LARGE_ADDRESS_AWARE = 0xFF; +} + void _set_linenumbers() { MAPFILE_SELECTED = 0xFF; @@ -2556,6 +2561,7 @@ fp_t _getcmd(char *cmd) { 10,7, &SET_IMPLIB_COFF, "IMPLIBCOFF" }, { 11,1, &VERBOSE_PROC, "INFORMATION" }, //{ 4,3, &INTO_PROC, "INTO" }, + { 17,2, &_set_largeaddressaware, "LARGEADDRESSAWARE" }, { 11,1, &_set_linenumbers, "LINENUMBERS" }, { 9,2, &LOWERCASE_PROC, "LOWERCASE" }, { 7,3, &SET_MACHINE, "MACHINE" }, @@ -2730,36 +2736,37 @@ F[arcalltranslation] FI[xds] FIXE[d]\n\ G[roupassociation] GROUPS[tack] HEA[p]\n\ H[elp] IG[norecase] IMPD[ef]\n\ IMPL[ib] IMPLIBC[off] I[nformation]\n\ -L[inenumbers] LO[wercase] MAC[hine]\n\ -M[ap] NOB[atch] NOCHECKA[bort]\n\ -NOCHECKE[xe] NOCHECKS[um] NOCO[deview]\n\ -NOCOM[defsearch] NOCV[pack] NODEB[ug]\n\ -NODEBUGA[pploader] NODEBUGB[rowser] NODEBUGC[overages]\n\ -NODEBUGLI[nes] NODEBUGLO[cals] NODEBUGP[ublics]\n\ -NODEBUGR[eferences] NODEBUGT[ypes] NOD[efaultlibrarysearch]\n\ -NODEL[executable] NODET[ailedmap] NODO[sseg]\n\ -NOEC[hoindirect] NOEMSP[ageframeio] NOEMSU[se40]\n\ -NOER[rorflag] NOEXE[pack] NOE[xtdictionary]\n\ -NOF[arcalltranslation] NOFI[xds] NOG[roupassociation]\n\ -NOGROUPS[tack] NOI[gnorecase] NOLI[nenumbers]\n\ -NOL[ogo] NOM[ap] NONA[mes]\n\ -NONT[host] NON[ullsdosseg] NOP[ackcode]\n\ -NOPACKD[ata] NOPACKF[unctions] NOPACKI[fnosegments]\n\ -NOPAU[se] NOPR[ompt] NOR[elocationcheck]\n\ -NOREO[rdersegments] NOSCANLIB NOSCANLINK\n\ -NOWARND[ups] NOWI[npack] NOX[ref]\n\ -NT[host] NU[llsdosseg] ON[error]\n\ -OPT PAC[kcode] PACKD[ata]\n\ -PACKF[unctions] PACKI[fnosegments] PACKS[ize]\n\ -PADC[ode] PADD[ata] PAG[esize]\n\ -PAU[se] PM[type] PR[ompt]\n\ -RC RELOC[ationcheck] REO[rdersegments]\n\ -SCANLIB SCANLINK SE[gments]\n\ -SEGP[ack] SI[lent] ST[ack]\n\ -STU[b] SU[bsystem] T[iny]\n\ -U[ppercase] VERS[ion] W[arnfixup]\n\ -WARND[ups] WI[npack] XM[smaxsize]\n\ -X[ref] XN[oignorecase] XU[ppercase]\n\ +LA[RGEADDRESSAWARE] L[inenumbers] LO[wercase]\n\ +MAC[hine] M[ap] NOB[atch]\n\ +NOCHECKA[bort] NOCHECKE[xe] NOCHECKS[um]\n\ +NOCO[deview] NOCOM[defsearch] NOCV[pack]\n\ +NODEB[ug] NODEBUGA[pploader] NODEBUGB[rowser]\n\ +NODEBUGC[overages] NODEBUGLI[nes] NODEBUGLO[cals]\n\ +NODEBUGP[ublics] NODEBUGR[eferences] NODEBUGT[ypes]\n\ +NOD[efaultlibrarysearch] NODEL[executable] NODET[ailedmap]\n\ +NODO[sseg] NOEC[hoindirect] NOEMSP[ageframeio]\n\ +NOEMSU[se40] NOER[rorflag] NOEXE[pack]\n\ +NOE[xtdictionary] NOF[arcalltranslation] NOFI[xds]\n\ +NOG[roupassociation] NOGROUPS[tack] NOI[gnorecase]\n\ +NOLI[nenumbers] NOL[ogo] NOM[ap]\n\ +NONA[mes] NONT[host] NON[ullsdosseg]\n\ +NOP[ackcode] NOPACKD[ata] NOPACKF[unctions]\n\ +NOPACKI[fnosegments] NOPAU[se] NOPR[ompt]\n\ +NOR[elocationcheck] NOREO[rdersegments] NOSCANLIB\n\ +NOSCANLINK NOWARND[ups] NOWI[npack]\n\ +NOX[ref] NT[host] NU[llsdosseg]\n\ +ON[error] OPT PAC[kcode]\n\ +PACKD[ata] PACKF[unctions] PACKI[fnosegments]\n\ +PACKS[ize] PADC[ode] PADD[ata]\n\ +PAG[esize] PAU[se] PM[type]\n\ +PR[ompt] RC RELOC[ationcheck]\n\ +REO[rdersegments] SCANLIB SCANLINK\n\ +SE[gments] SEGP[ack] SI[lent]\n\ +ST[ack] STU[b] SU[bsystem]\n\ +T[iny] U[ppercase] VERS[ion]\n\ +W[arnfixup] WARND[ups] WI[npack]\n\ +XM[smaxsize] X[ref] XN[oignorecase]\n\ +XU[ppercase]\n\ "); } diff --git a/exe/peendsec.asm b/exe/peendsec.asm index fc49e8c..0fed6b6 100644 --- a/exe/peendsec.asm +++ b/exe/peendsec.asm @@ -145,9 +145,16 @@ L15$: GETT CL,PE_BASE_FIXED OR CL,CL - JNZ L20$ + JNZ L18$ AND AL,0FEH ;MARK NOT FIXED +L18$: + GETT CL,PE_LARGE_ADDRESS_AWARE + OR CL,CL + JZ L20$ + + OR AL,20H ;MARK IT LARGE ADDRESS AWARE + L20$: MOV ECX,FLAG_0C