1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

Cleanup stub/*.lds linker scripts

modified:   Makefile
	modified:   src/amd64-linux.elf-fold.lds
	modified:   src/amd64-linux.elf-so_fold.lds
	modified:   src/arm.v4a-linux.elf-entry.lds
	modified:   src/arm.v4a-linux.elf-fold.lds
	modified:   src/arm.v4a-linux.elf-so_entry.lds
	modified:   src/arm.v4a-linux.elf-so_fold.lds
	modified:   src/arm.v5a-linux.elf-entry.lds
	modified:   src/arm.v5a-linux.elf-fold.lds
	modified:   src/arm.v5a-linux.elf-so_entry.lds
	modified:   src/arm.v5a-linux.elf-so_fold.lds
	modified:   src/arm64-linux.elf-fold.lds
	modified:   src/arm64-linux.elf-so_fold.lds
	modified:   src/armeb.v4a-linux.elf-entry.lds
	modified:   src/armeb.v4a-linux.elf-fold.lds
	modified:   src/i386-bsd.elf-fold.lds
	modified:   src/i386-linux.elf-fold.lds
	modified:   src/i386-linux.elf-so_entry.lds
	modified:   src/i386-linux.elf-so_fold.lds
	modified:   src/i386-linux.elf.execve-fold.lds
	modified:   src/i386-linux.elf.interp-fold.lds
	modified:   src/i386-linux.elf.shell-fold.lds
	modified:   src/mips.r3000-linux.elf-fold.lds
	modified:   src/mipsel.r3000-linux.elf-fold.lds
	modified:   src/powerpc-linux.elf-fold.lds
	modified:   src/powerpc64-linux.elf-fold.lds
	modified:   src/powerpc64le-linux.elf-fold.lds
	new file:   src/upxfd_linux.c
This commit is contained in:
John Reiser 2024-11-18 16:00:36 -08:00
parent 886e325cbf
commit 3d6b2e4617
28 changed files with 156 additions and 113 deletions

View File

@ -565,23 +565,27 @@ tc.arm.v4a-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototype
arm.v4a-linux.elf-entry.h : $(srcdir)/src/arm.v4a-linux.elf-entry.lds \
$(srcdir)/src/$$T.S \
tmp/arm.v4a-linux.elf-upxfd_android.o
tmp/arm.v4a-linux.elf-upxfd_android.o \
tmp/arm.v4a-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r --format=elf32-littlearm -Map tmp/$T.map -o tmp/$T.bin \
-T src/arm.v4a-linux.elf-entry.lds \
tmp/$T.o \
tmp/arm.v4a-linux.elf-upxfd_android.o
tmp/arm.v4a-linux.elf-upxfd_android.o \
tmp/arm.v4a-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
arm.v4a-linux.elf-so_entry.h : src/arm.v4a-linux.elf-so_entry.lds \
$(srcdir)/src/$$T.S \
tmp/arm.v4a-linux.elf-upxfd_android.o
tmp/arm.v4a-linux.elf-upxfd_android.o \
tmp/arm.v4a-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r --format=elf32-littlearm -Map tmp/$T.map -o tmp/$T.bin \
-T src/arm.v4a-linux.elf-so_entry.lds \
tmp/$T.o \
tmp/arm.v4a-linux.elf-upxfd_android.o
tmp/arm.v4a-linux.elf-upxfd_android.o \
tmp/arm.v4a-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
@ -590,9 +594,15 @@ tmp/arm.v4a-linux.elf-upxfd_android.o : $(srcdir)/src/upxfd_android.c
$(call tc,objcopy) -R .comment $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
tmp/arm.v4a-linux.elf-upxfd_linux.o : $(srcdir)/src/upxfd_linux.c
$(call tc,gcc) -c -O $< -o $@
$(call tc,objcopy) -R .comment $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
arm.v4a-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/arm.v4a-linux.elf-upxfd_android.o \
tmp/arm.v4a-linux.elf-upxfd_linux.o \
tmp/arm.v4a-expand.o \
tmp/arm.v4a-linux.elf-main2.o
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
@ -602,6 +612,7 @@ arm.v4a-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
arm.v4a-linux.elf-so_fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/arm.v4a-linux.elf-upxfd_android.o \
tmp/arm.v4a-linux.elf-upxfd_linux.o \
tmp/arm.v4a-expand.o \
tmp/arm.v4a-linux.elf-so_main.o
multiarch-ld-2.23.90 -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
@ -670,23 +681,27 @@ tc.arm.v5a-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototype
arm.v5a-linux.elf-entry.h : $(srcdir)/src/arm.v5a-linux.elf-entry.lds \
$(srcdir)/src/$$T.S \
tmp/arm.v5a-linux.elf-upxfd_android.o
tmp/arm.v5a-linux.elf-upxfd_android.o \
tmp/arm.v5a-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r --format=elf32-littlearm -Map tmp/$T.map -o tmp/$T.bin \
-T src/arm.v5a-linux.elf-entry.lds \
tmp/$T.o \
tmp/arm.v5a-linux.elf-upxfd_android.o
tmp/arm.v5a-linux.elf-upxfd_android.o \
tmp/arm.v5a-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
arm.v5a-linux.elf-so_entry.h : src/arm.v5a-linux.elf-so_entry.lds \
$(srcdir)/src/$$T.S \
tmp/arm.v5a-linux.elf-upxfd_android.o
tmp/arm.v5a-linux.elf-upxfd_android.o \
tmp/arm.v5a-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r --format=elf32-littlearm -Map tmp/$T.map -o tmp/$T.bin \
-T src/arm.v5a-linux.elf-so_entry.lds \
tmp/$T.o \
tmp/arm.v5a-linux.elf-upxfd_android.o
tmp/arm.v5a-linux.elf-upxfd_android.o \
tmp/arm.v5a-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
@ -695,9 +710,15 @@ tmp/arm.v5a-linux.elf-upxfd_android.o : $(srcdir)/src/upxfd_android.c
$(call tc,objcopy) -R .comment $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
tmp/arm.v5a-linux.elf-upxfd_linux.o : $(srcdir)/src/upxfd_linux.c
$(call tc,gcc) -c -O $< -o $@
$(call tc,objcopy) -R .comment $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
arm.v5a-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/arm.v5a-linux.elf-upxfd_android.o \
tmp/arm.v5a-linux.elf-upxfd_linux.o \
tmp/arm.v5a-expand.o \
tmp/arm.v5a-linux.elf-main2.o
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
@ -707,6 +728,7 @@ arm.v5a-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
arm.v5a-linux.elf-so_fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/arm.v5a-linux.elf-upxfd_android.o \
tmp/arm.v5a-linux.elf-upxfd_linux.o \
tmp/arm.v5a-expand.o \
tmp/arm.v5a-linux.elf-so_main.o
multiarch-ld-2.23.90 -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
@ -895,18 +917,21 @@ tc.armeb.v4a-linux.elf.gcc = $(tc.arm.v4a-linux.elf.gcc) -mbig-endian -DBIG_ENDI
armeb.v4a-linux.elf-entry.h : $(srcdir)/src/armeb.v4a-linux.elf-entry.lds \
$(srcdir)/src/$$T.S \
tmp/armeb.v4a-linux.elf-upxfd_android.o
tmp/armeb.v4a-linux.elf-upxfd_android.o \
tmp/armeb.v4a-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r --format=elf32-bigarm -Map tmp/$T.map -o tmp/$T.bin \
-T src/armeb.v4a-linux.elf-entry.lds \
tmp/$T.o \
tmp/armeb.v4a-linux.elf-upxfd_android.o
tmp/armeb.v4a-linux.elf-upxfd_android.o \
tmp/armeb.v4a-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
armeb.v4a-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/armeb.v4a-linux.elf-upxfd_android.o \
tmp/armeb.v4a-linux.elf-upxfd_linux.o \
tmp/armeb.v4a-expand.o \
tmp/armeb.v4a-linux.elf-main2.o
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
@ -918,6 +943,11 @@ tmp/armeb.v4a-linux.elf-upxfd_android.o : $(srcdir)/src/upxfd_android.c
$(call tc,objcopy) -R .comment $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
tmp/armeb.v4a-linux.elf-upxfd_linux.o : $(srcdir)/src/upxfd_linux.c
$(call tc,gcc) -c -O $< -o $@
$(call tc,objcopy) -R .comment $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
tmp/armeb.v4a-expand.o: $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
@ -1267,34 +1297,44 @@ tc.i386-linux.elf.gcc += -fweb
i386-linux.elf-entry.h : $(srcdir)/src/i386-linux.elf-entry.lds \
$(srcdir)/src/$$T.S \
tmp/i386-linux.elf-upxfd_android.o
tmp/i386-linux.elf-upxfd_android.o \
tmp/i386-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r -Map tmp/$T.map -o tmp/$T.bin \
-T src/i386-linux.elf-entry.lds \
tmp/$T.o \
tmp/i386-linux.elf-upxfd_android.o
tmp/i386-linux.elf-upxfd_android.o \
tmp/i386-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
i386-linux.elf-so_entry.h : $(srcdir)/src/i386-linux.elf-so_entry.lds \
$(srcdir)/src/$$T.S \
tmp/i386-linux.elf-upxfd_android.o
tmp/i386-linux.elf-upxfd_android.o \
tmp/i386-linux.elf-upxfd_linux.o
$(call tc,gcc) -c $(srcdir)/src/$T.S -o tmp/$T.o
multiarch-ld-2.17 -r -Map tmp/$T.map -o tmp/$T.bin \
-T src/i386-linux.elf-so_entry.lds \
tmp/$T.o \
tmp/i386-linux.elf-upxfd_android.o
tmp/i386-linux.elf-upxfd_android.o \
tmp/i386-linux.elf-upxfd_linux.o
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
tmp/i386-linux.elf-upxfd_android.o : $(srcdir)/src/upxfd_android.c
$(call tc,gcc) -c -O $< -o $@
$(call tc,objcopy) -R .comment $@
$(call tc,objcopy) --rename-section .text=UMF_ANDROID -R .comment -R .data -R .bss -R .note.GNU-stack $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
tmp/i386-linux.elf-upxfd_linux.o : $(srcdir)/src/upxfd_linux.c
$(call tc,gcc) -c -O $< -o $@
$(call tc,objcopy) --rename-section .text=UMF_LINUX -R .comment -R .data -R .bss -R .note.GNU-stack $@
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
i386-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/i386-linux.elf-upxfd_android.o \
tmp/i386-linux.elf-upxfd_linux.o \
tmp/i386-expand.o \
tmp/i386-linux.elf-main2.o
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
@ -1305,6 +1345,7 @@ i386-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
i386-linux.elf-so_fold.h : $(srcdir)/src/$$T.lds \
tmp/$$T.o \
tmp/i386-linux.elf-upxfd_android.o \
tmp/i386-linux.elf-upxfd_linux.o \
tmp/i386-expand.o \
tmp/i386-linux.elf-so_main.o
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin

View File

@ -30,9 +30,8 @@
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
/*ENTRY(_start)*/
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
}

View File

@ -11,46 +11,8 @@
*/
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
/*
multiarch-ld-2.17 --strip-all \
-T ./src/amd64-linux.elf-so_fold.lds \
-Map tmp/amd64-linux.elf-so_fold.map \
tmp/amd64-linux.elf-so_fold.o \
tmp/amd64-linux.elf-so_main.o \
tmp/amd64-linux.elf-entry.o \
-o tmp/amd64-linux.elf-so_fold.bin
*/
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
/*SO_HEAD : { *(SO_HEAD) }*/
/*
.text :
{
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
*(NRV_HEAD)
*(NRV2B)
*(NRV2E)
*(NRV2D)
*(NRV_TAIL)
*(LZMA*)
*(SO_MAIN)
*(SO_TAIL)
}
.data :
{
*(.data .data.* .gnu.linkonce.d.*)
}
.data1 : { *(.data1) }
.bss :
{
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
}
*/
. = SIZEOF_HEADERS;
}

View File

@ -3,7 +3,6 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
}
ELFMAINX : {

View File

@ -33,5 +33,5 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
}

View File

@ -3,7 +3,6 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
}
ELFMAINX : {

View File

@ -1,10 +1,7 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
SECTIONS
{
SO_HEAD : {
*(SO_HEAD)
*(.text)
}
. = SIZEOF_HEADERS;
}

View File

@ -3,7 +3,6 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
}
ELFMAINX : {

View File

@ -30,19 +30,8 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
/* . = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
*(.text)
*(.data)
} : text
.data : {
} : data
. = SIZEOF_HEADERS;
}

View File

@ -3,7 +3,6 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
}
ELFMAINX : {

View File

@ -1,10 +1,7 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
SECTIONS
{
SO_HEAD : {
*(SO_HEAD)
*(.text)
}
. = SIZEOF_HEADERS;
}

View File

@ -30,7 +30,19 @@
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", "elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
PHDRS
{
text PT_LOAD FILEHDR PHDRS FLAGS ( 5 ) ; /* r-x (no -w-) */
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
. = SIZEOF_HEADERS + 12 ;
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)
} : text
.data : {
} : data
}

View File

@ -3,5 +3,5 @@ OUTPUT_ARCH(aarch64)
SECTIONS
{
. = SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
}

View File

@ -3,7 +3,6 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
}
ELFMAINX : {

View File

@ -28,10 +28,10 @@
*/
OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm", "elf32-bigarm")
OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
}

View File

@ -31,6 +31,7 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
@ -38,7 +39,7 @@ PHDRS
}
SECTIONS
{
. = 0x00c01000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)

View File

@ -30,9 +30,8 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
/*ENTRY(_start)*/
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
}

View File

@ -3,7 +3,6 @@ OUTPUT_ARCH(i386)
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
}
ELFMAINX : {

View File

@ -1,10 +1,6 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
SECTIONS
{
SO_HEAD : {
*(SO_HEAD)
*(.text)
}
. = SIZEOF_HEADERS;
}

View File

@ -30,7 +30,7 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
/*ENTRY(_start)*/
PHDRS
{
phdr0 PT_LOAD FILEHDR PHDRS FLAGS(5); /* no PF_W: strict SELinux, PaX, grSecurity */
@ -39,7 +39,7 @@ PHDRS
SECTIONS
{
. = 0x00401000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
. = SIZEOF_HEADERS;
.data : { /* put everything together in one Phdr */
*(.text)
*(.rodata)

View File

@ -30,7 +30,7 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
/*ENTRY(_start)*/
PHDRS /* force exactly 1 ELF32_Phdr: in particular, no PT_GNU_STACK */
{
phdr0 PT_LOAD FILEHDR PHDRS FLAGS(5); /* no PF_W */
@ -39,7 +39,7 @@ PHDRS /* force exactly 1 ELF32_Phdr: in particular, no PT_GNU_STACK */
SECTIONS
{
. = 0x10000 + SIZEOF_HEADERS;
. = SIZEOF_HEADERS;
.text : { /* put everything together in one Phdr */
*(.text)
*(.rodata)

View File

@ -30,7 +30,7 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
/*ENTRY(_start)*/
PHDRS
{
phdr0 PT_LOAD FILEHDR PHDRS FLAGS(5); /* no PF_W: strict SELinux, PaX, grSecurity */
@ -39,8 +39,7 @@ PHDRS
SECTIONS
{
/* 0x01400000: avoid 0x01000000 for shell itself being compressed */
. = 0x01400000 + SIZEOF_HEADERS;
. = SIZEOF_HEADERS;
. = ALIGN(0x80);
.data : { /* put everything together in one Phdr */
*(.text)

View File

@ -30,14 +30,15 @@
OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
OUTPUT_ARCH(mips)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
data PT_LOAD ;
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)

View File

@ -30,14 +30,15 @@
OUTPUT_FORMAT("elf32-littlemips", "elf32-bigmips", "elf32-littlemips")
OUTPUT_ARCH(mips)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
data PT_LOAD ;
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)

View File

@ -30,14 +30,15 @@
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
OUTPUT_ARCH(powerpc:common)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
data PT_LOAD ;
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)

View File

@ -30,7 +30,7 @@
OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc")
OUTPUT_ARCH(powerpc:common64)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
@ -38,6 +38,7 @@ PHDRS
}
SECTIONS
{
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)

View File

@ -30,7 +30,7 @@
OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle")
OUTPUT_ARCH(powerpc:common64)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
@ -38,6 +38,7 @@ PHDRS
}
SECTIONS
{
. = SIZEOF_HEADERS;
.text : {
*(.text)
*(.data)

View File

@ -0,0 +1,52 @@
/* upxfd_create.c -- workaround for 32-bit Android
This file is part of the UPX executable compressor.
Copyright (C) 2023 John F. Reiser
All Rights Reserved.
*/
#include "include/linux.h" // syscall decls; i386 inlines via "int 0x80"
#define MFD_EXEC 0x10
//#define O_RDWR 2
#define O_DIRECTORY 0200000 /* 0x010000 asm-generic/fcntl.h */
#define O_TMPFILE 020000000 /* 0x400000 asm-generic/fcntl.h */
#define EINVAL 22 /* asm-generic/errno-base.h */
// Implementation for Linux-native, where memfd_create
// (or /dev/shm) works. Saves space in contrast to
// upxfd_android (or Android emulator), which must
// fall back to /data/data/$APP_NAME/cache/upxAAA ,
// and also must work around inconsistent __NR_ftruncate.
// 1. Try memfd_create
// 2. Try /dev/shm
unsigned long upx_mmap_and_fd_linux( // returns (mapped_addr | (1+ fd))
void *ptr // desired address
, unsigned datlen // mapped length
, char *pathname // 0 ==> get_upxfn_path()
)
{
(void)pathname; // FIXME NYI
char str_upx[] = {'u','p','x',0};
int fd = memfd_create(str_upx, MFD_EXEC);
if (-EINVAL == fd) { // 2024-10-15 MFD_EXEC unknown to ubuntu-20.04
fd = memfd_create(str_upx, 0); // try again
}
if (fd < 0) { // last chance for Linux
char str_dev_shm[] = {'/','d','e','v','/','s','h','m', 0};
fd = open(str_dev_shm, O_RDWR | O_DIRECTORY | O_TMPFILE, 0700);
if (fd < 0) {
return (unsigned long)(long)fd;
}
// Beware: /dev/shm might limit write() to 8KiB at a time.
}
int rv = ftruncate(fd, datlen);
if (rv < 0) {
return (unsigned long)(long)rv;
}
ptr = mmap(ptr, datlen, PROT_READ|PROT_WRITE,
(ptr ? MAP_FIXED : 0)|MAP_SHARED, fd, 0);
if (PAGE_MASK <= (unsigned long)ptr) {
return (unsigned long)ptr; // errno
}
return (unsigned long)ptr + (1+ (unsigned)fd);
}