PowerPC64: stub uses new strategy

Needed: expert on TOC for big-endian.  glibc, musl, gcc disagree
on layout (is the .func first?) and usage for .e_entry.
	modified:   p_lx_elf.cpp
	modified:   stub/src/amd64-linux.elf-main.c
	modified:   stub/src/amd64-linux.elf-fold.S
	modified:   stub/src/arch/powerpc/64le/ppc_regs.h
	modified:   stub/src/i386-linux.elf-main.c
	modified:   stub/src/powerpc-linux.elf-entry.S
	modified:   stub/src/powerpc-linux.elf-fold.S
	modified:   stub/src/powerpc64le-darwin.dylib-entry.S
	modified:   stub/src/powerpc64le-darwin.macho-entry.S
	modified:   stub/src/powerpc64le-linux.elf-entry.S
	modified:   stub/src/powerpc64le-linux.elf-fold.S
	modified:   stub/Makefile
	also .h, .bin.dump, .map
This commit is contained in:
John Reiser
2017-10-07 13:43:12 -07:00
parent 7f905724b1
commit b37bc99330
28 changed files with 1542 additions and 1478 deletions
+10 -10
View File
@@ -8,7 +8,7 @@ Linker script and memory map
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0x740
.text 0x00000000001000bc 0x768
*(.text)
.text 0x00000000001000bc 0x18e tmp/amd64-linux.elf-fold.o
0x000000000010023a munmap
@@ -21,20 +21,20 @@ Linker script and memory map
0x000000000010023e mprotect
0x0000000000100232 close
*fill* 0x000000000010024a 0x2 00
.text 0x000000000010024c 0x5ae tmp/amd64-linux.elf-main.o
0x00000000001006b7 upx_main
.text 0x000000000010024c 0x5d5 tmp/amd64-linux.elf-main.o
0x00000000001006e0 upx_main
*(.data)
*fill* 0x00000000001007fa 0x2 00
.data 0x00000000001007fc 0x0 tmp/amd64-linux.elf-fold.o
.data 0x00000000001007fc 0x0 tmp/amd64-linux.elf-main.o
*fill* 0x0000000000100821 0x3 00
.data 0x0000000000100824 0x0 tmp/amd64-linux.elf-fold.o
.data 0x0000000000100824 0x0 tmp/amd64-linux.elf-main.o
.data
.bss 0x00000000001007fc 0x0
.bss 0x00000000001007fc 0x0 tmp/amd64-linux.elf-fold.o
.bss 0x00000000001007fc 0x0 tmp/amd64-linux.elf-main.o
.bss 0x0000000000100824 0x0
.bss 0x0000000000100824 0x0 tmp/amd64-linux.elf-fold.o
.bss 0x0000000000100824 0x0 tmp/amd64-linux.elf-main.o
.rela.dyn 0x0000000000100800 0x0
.rela.dyn 0x0000000000100828 0x0
.rela.text 0x0000000000000000 0x0 tmp/amd64-linux.elf-fold.o
LOAD tmp/amd64-linux.elf-fold.o
LOAD tmp/amd64-linux.elf-main.o
@@ -14,7 +14,7 @@ Idx Name Size VMA LMA File off Algn Flags
9 NRV_TAIL 0000001c 00000000 00000000 00001788 2**0 CONTENTS, READONLY
10 CFLUSH 00000024 00000000 00000000 000017a4 2**0 CONTENTS, READONLY
11 ELFMAINY 00000012 00000000 00000000 000017c8 2**0 CONTENTS, RELOC, READONLY
12 ELFMAINZ 0000017c 00000000 00000000 000017dc 2**2 CONTENTS, RELOC, READONLY
12 ELFMAINZ 00000184 00000000 00000000 000017dc 2**2 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
00000000 l d NRV_TAIL 00000000 NRV_TAIL
@@ -34,7 +34,7 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
00000000 R_PPC_REL24 ELFMAINZ+0x00000134
00000000 R_PPC_REL24 ELFMAINZ+0x0000013c
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
@@ -58,4 +58,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE
00000178 R_PPC_ADDR32 O_BINFO
00000180 R_PPC_ADDR32 O_BINFO
+8 -8
View File
@@ -13,17 +13,17 @@ TARGET(elf32-powerpc)
*(.text)
.text 0x0000000000100080 0x250 tmp/powerpc-linux.elf-fold.o
0x0000000000100080 get_page_mask
0x00000000001002b8 munmap
0x0000000000100288 readlink
0x00000000001002c0 munmap
0x0000000000100290 readlink
0x000000000010026c mmap
0x0000000000100290 write
0x0000000000100298 read
0x0000000000100298 write
0x00000000001002a0 read
0x00000000001002c8 my_bkpt
0x0000000000100280 exit
0x00000000001002c0 brk
0x00000000001002a0 open
0x00000000001002b0 mprotect
0x00000000001002a8 close
0x0000000000100288 brk
0x00000000001002a8 open
0x00000000001002b8 mprotect
0x00000000001002b0 close
.text 0x00000000001002d0 0xd78 tmp/powerpc-linux.elf-main.o
0x0000000000100e40 upx_main
*(.data)
@@ -15,11 +15,10 @@ Idx Name Size VMA LMA File off Algn
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001ce0 2**0 CONTENTS, READONLY
11 ELFMAINY 00000012 0000000000000000 0000000000000000 00001d04 2**0 CONTENTS, RELOC, READONLY
12 ELFMAINZe 00000018 0000000000000000 0000000000000000 00001d18 2**3 CONTENTS, RELOC, READONLY
13 ELFMAINZ 00000248 0000000000000000 0000000000000000 00001d30 2**2 CONTENTS, RELOC, READONLY
13 ELFMAINZ 000001f8 0000000000000000 0000000000000000 00001d30 2**2 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
0000000000000000 l d ELFMAINX 0000000000000000 ELFMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
@@ -30,6 +29,7 @@ SYMBOL TABLE:
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d CFLUSH 0000000000000000 CFLUSH
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 l d ELFMAINZe 0000000000000000 ELFMAINZe
0000000000000000 g ELFMAINX 0000000000000000 _start
0000000000000000 g ELFMAINZe 0000000000000000 entry_descr
@@ -37,7 +37,7 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x000000000000018c
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x000000000000013c
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
@@ -65,6 +65,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE
0000000000000074 R_PPC64_REL14 ELFMAINY
00000000000000f8 R_PPC64_REL14 ELFMAINY
0000000000000244 R_PPC64_ADDR32 O_BINFO
00000000000001f4 R_PPC64_ADDR32 O_BINFO
+41 -39
View File
@@ -9,59 +9,61 @@ Linker script and memory map
TARGET(elf64-powerpc)
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0xa28
.text 0x00000000001000bc 0xa6c
*(.text)
.text 0x00000000001000bc 0x2dc tmp/powerpc64-linux.elf-fold.o
0x0000000000100344 exit
0x000000000010034c readlink
0x0000000000100354 brk
0x000000000010035c close
0x0000000000100364 open
0x000000000010036c munmap
0x0000000000100374 mprotect
.text 0x00000000001000bc 0x2f0 tmp/powerpc64-linux.elf-fold.o
0x00000000001000bc get_page_mask
0x000000000010034c mmap
0x0000000000100364 exit
0x000000000010036c brk
0x0000000000100374 readlink
0x000000000010037c read
0x0000000000100384 mmap
.text 0x0000000000100398 0x74c tmp/powerpc64-linux.elf-main.o
0x0000000000100384 open
0x000000000010038c close
0x0000000000100394 mprotect
0x000000000010039c munmap
0x00000000001003a4 my_bkpt
.text 0x00000000001003ac 0x77c tmp/powerpc64-linux.elf-main.o
*(.data)
.data 0x0000000000100ae4 0x0 tmp/powerpc64-linux.elf-fold.o
.data 0x0000000000100ae4 0x0 tmp/powerpc64-linux.elf-main.o
.data 0x0000000000100b28 0x0 tmp/powerpc64-linux.elf-fold.o
.data 0x0000000000100b28 0x0 tmp/powerpc64-linux.elf-main.o
.sfpr 0x0000000000100ae4 0xa4
.sfpr 0x0000000000100ae4 0xa4 linker stubs
0x0000000000100ae4 _savegpr0_14
0x0000000000100b0c _savegpr0_24
0x0000000000100b1c _savegpr0_28
0x0000000000100b34 _restgpr0_14
0x0000000000100b5c _restgpr0_24
0x0000000000100b6c _restgpr0_28
.sfpr 0x0000000000100b28 0xa4
.sfpr 0x0000000000100b28 0xa4 linker stubs
0x0000000000100b28 _savegpr0_14
0x0000000000100b50 _savegpr0_24
0x0000000000100b60 _savegpr0_28
0x0000000000100b78 _restgpr0_14
0x0000000000100ba0 _restgpr0_24
0x0000000000100bb0 _restgpr0_28
.glink 0x0000000000100b88 0x0
.glink 0x0000000000100b88 0x0 linker stubs
.glink 0x0000000000100bd0 0x0
.glink 0x0000000000100bd0 0x0 linker stubs
.eh_frame 0x0000000000100b88 0x0
.eh_frame 0x0000000000100b88 0x0 linker stubs
.eh_frame 0x0000000000100bcc 0x0
.eh_frame 0x0000000000100bcc 0x0 linker stubs
.rela.dyn 0x0000000000100b88 0x0
.rela.iplt 0x0000000000100b88 0x0 linker stubs
.rela.dyn 0x0000000000100bd0 0x0
.rela.iplt 0x0000000000100bd0 0x0 linker stubs
.data
LOAD tmp/powerpc64-linux.elf-fold.o
LOAD tmp/powerpc64-linux.elf-main.o
OUTPUT(tmp/powerpc64-linux.elf-fold.bin elf64-powerpc)
.branch_lt 0x0000000000100b88 0x0
.branch_lt 0x0000000000100b88 0x0 linker stubs
.branch_lt 0x0000000000100bd0 0x0
.branch_lt 0x0000000000100bd0 0x0 linker stubs
.toc 0x0000000000100b88 0x0
.toc 0x0000000000100b88 0x0 tmp/powerpc64-linux.elf-main.o
.toc 0x0000000000100bd0 0x0
.toc 0x0000000000100bd0 0x0 tmp/powerpc64-linux.elf-main.o
.opd 0x0000000000100b88 0x58
.opd 0x0000000000100b88 0x58 tmp/powerpc64-linux.elf-main.o
0x0000000000100bc8 upx_main
.opd 0x0000000000100bd0 0x58
.opd 0x0000000000100bd0 0x58 tmp/powerpc64-linux.elf-main.o
0x0000000000100c10 upx_main
.iplt 0x0000000000100be0 0x0
.iplt 0x0000000000100be0 0x0 linker stubs
.iplt 0x0000000000100c28 0x0
.iplt 0x0000000000100c28 0x0 linker stubs
.bss 0x0000000000100be0 0x0
.bss 0x0000000000100be0 0x0 tmp/powerpc64-linux.elf-fold.o
.bss 0x0000000000100be0 0x0 tmp/powerpc64-linux.elf-main.o
.bss 0x0000000000100c28 0x0
.bss 0x0000000000100c28 0x0 tmp/powerpc64-linux.elf-fold.o
.bss 0x0000000000100c28 0x0 tmp/powerpc64-linux.elf-main.o
@@ -14,11 +14,10 @@ Idx Name Size VMA LMA File off Algn
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cbc 2**0 CONTENTS, READONLY
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cd8 2**0 CONTENTS, READONLY
11 ELFMAINY 00000012 0000000000000000 0000000000000000 00001cfc 2**0 CONTENTS, RELOC, READONLY
12 ELFMAINZ 00000248 0000000000000000 0000000000000000 00001d10 2**2 CONTENTS, RELOC, READONLY
12 ELFMAINZ 000001f8 0000000000000000 0000000000000000 00001d10 2**2 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
0000000000000000 l d ELFMAINX 0000000000000000 ELFMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
@@ -29,12 +28,13 @@ SYMBOL TABLE:
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d CFLUSH 0000000000000000 CFLUSH
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 g ELFMAINX 0000000000000000 _start
0000000000000000 *UND* 0000000000000000 O_BINFO
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x000000000000018c
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x000000000000013c
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
@@ -58,6 +58,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE
0000000000000074 R_PPC64_REL14 ELFMAINY
00000000000000f8 R_PPC64_REL14 ELFMAINY
0000000000000244 R_PPC64_ADDR32 O_BINFO
00000000000001f4 R_PPC64_ADDR32 O_BINFO
+42 -40
View File
@@ -9,59 +9,61 @@ Linker script and memory map
TARGET(elf64-powerpcle)
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0xa00
.text 0x00000000001000bc 0xa38
*(.text)
.text 0x00000000001000bc 0x2b8 tmp/powerpc64le-linux.elf-fold.o
0x0000000000100320 exit
0x0000000000100328 readlink
0x0000000000100330 brk
0x0000000000100338 close
0x0000000000100340 open
0x0000000000100348 munmap
0x0000000000100350 mprotect
0x0000000000100358 read
0x0000000000100360 mmap
.text 0x0000000000100374 0x748 tmp/powerpc64le-linux.elf-main.o
.text 0x00000000001000bc 0x2c0 tmp/powerpc64le-linux.elf-fold.o
0x00000000001000bc get_page_mask
0x000000000010031c mmap
0x0000000000100334 exit
0x000000000010033c brk
0x0000000000100344 readlink
0x000000000010034c read
0x0000000000100354 open
0x000000000010035c close
0x0000000000100364 mprotect
0x000000000010036c munmap
0x0000000000100374 my_bkpt
.text 0x000000000010037c 0x778 tmp/powerpc64le-linux.elf-main.o
*(.data)
.data 0x0000000000100abc 0x0 tmp/powerpc64le-linux.elf-fold.o
.data 0x0000000000100abc 0x0 tmp/powerpc64le-linux.elf-main.o
.data 0x0000000000100af4 0x0 tmp/powerpc64le-linux.elf-fold.o
.data 0x0000000000100af4 0x0 tmp/powerpc64le-linux.elf-main.o
.sfpr 0x0000000000100abc 0xa4
.sfpr 0x0000000000100abc 0xa4 linker stubs
0x0000000000100abc _savegpr0_14
0x0000000000100ae4 _savegpr0_24
0x0000000000100af4 _savegpr0_28
0x0000000000100b0c _restgpr0_14
0x0000000000100b34 _restgpr0_24
0x0000000000100b44 _restgpr0_28
.sfpr 0x0000000000100af4 0xa4
.sfpr 0x0000000000100af4 0xa4 linker stubs
0x0000000000100af4 _savegpr0_14
0x0000000000100b1c _savegpr0_24
0x0000000000100b2c _savegpr0_28
0x0000000000100b44 _restgpr0_14
0x0000000000100b6c _restgpr0_24
0x0000000000100b7c _restgpr0_28
.glink 0x0000000000100b60 0x0
.glink 0x0000000000100b60 0x0 linker stubs
.glink 0x0000000000100b98 0x0
.glink 0x0000000000100b98 0x0 linker stubs
.eh_frame 0x0000000000100b60 0x0
.eh_frame 0x0000000000100b60 0x0 linker stubs
.eh_frame 0x0000000000100b98 0x0
.eh_frame 0x0000000000100b98 0x0 linker stubs
.rela.dyn 0x0000000000100b60 0x0
.rela.iplt 0x0000000000100b60 0x0 linker stubs
.rela.dyn 0x0000000000100b98 0x0
.rela.iplt 0x0000000000100b98 0x0 linker stubs
.data
LOAD tmp/powerpc64le-linux.elf-fold.o
LOAD tmp/powerpc64le-linux.elf-main.o
OUTPUT(tmp/powerpc64le-linux.elf-fold.bin elf64-powerpcle)
.branch_lt 0x0000000000100b60 0x0
.branch_lt 0x0000000000100b60 0x0 linker stubs
.branch_lt 0x0000000000100b98 0x0
.branch_lt 0x0000000000100b98 0x0 linker stubs
.toc 0x0000000000100b60 0x0
.toc 0x0000000000100b60 0x0 tmp/powerpc64le-linux.elf-main.o
.toc 0x0000000000100b98 0x0
.toc 0x0000000000100b98 0x0 tmp/powerpc64le-linux.elf-main.o
.opd 0x0000000000100b60 0x58
.opd 0x0000000000100b60 0x58 tmp/powerpc64le-linux.elf-main.o
0x0000000000100ba0 upx_main
.opd 0x0000000000100b98 0x58
.opd 0x0000000000100b98 0x58 tmp/powerpc64le-linux.elf-main.o
0x0000000000100bd8 upx_main
.iplt 0x0000000000100bb8 0x0
.iplt 0x0000000000100bb8 0x0 linker stubs
.iplt 0x0000000000100bf0 0x0
.iplt 0x0000000000100bf0 0x0 linker stubs
.bss 0x0000000000100bb8 0x0
.bss 0x0000000000100bb8 0x0 tmp/powerpc64le-linux.elf-fold.o
.bss 0x0000000000100bb8 0x0 tmp/powerpc64le-linux.elf-main.o
.bss 0x0000000000100bf0 0x0
.bss 0x0000000000100bf0 0x0 tmp/powerpc64le-linux.elf-fold.o
.bss 0x0000000000100bf0 0x0 tmp/powerpc64le-linux.elf-main.o