2013-10-29 14:10:34 +08:00
|
|
|
#source: elfv2.s
|
|
|
|
#as: -a64
|
2018-02-05 10:47:52 +08:00
|
|
|
#ld: -melf64ppc -shared
|
2013-10-29 14:10:34 +08:00
|
|
|
#objdump: -dr
|
|
|
|
|
|
|
|
.*
|
|
|
|
|
|
|
|
Disassembly of section \.text:
|
|
|
|
|
2017-08-06 20:34:25 +08:00
|
|
|
.* <.*\.plt_call\.f4>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (f8 41 00 18|18 00 41 f8) std r2,24\(r1\)
|
|
|
|
.*: (e9 82 80 38|38 80 82 e9) ld r12,-32712\(r2\)
|
|
|
|
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
|
|
|
.*: (4e 80 04 20|20 04 80 4e) bctr
|
2017-09-09 20:25:22 +08:00
|
|
|
\.\.\.
|
2013-10-29 14:10:34 +08:00
|
|
|
|
2018-04-09 07:52:53 +08:00
|
|
|
.* <.*\.plt_call\.f3>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (f8 41 00 18|18 00 41 f8) std r2,24\(r1\)
|
2018-04-09 07:52:53 +08:00
|
|
|
.*: (e9 82 80 28|28 80 82 e9) ld r12,-32728\(r2\)
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
|
|
|
.*: (4e 80 04 20|20 04 80 4e) bctr
|
2017-09-09 20:25:22 +08:00
|
|
|
\.\.\.
|
2013-10-29 14:10:34 +08:00
|
|
|
|
2018-04-09 07:52:53 +08:00
|
|
|
.* <.*\.plt_call\.f1>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (f8 41 00 18|18 00 41 f8) std r2,24\(r1\)
|
2018-04-09 07:52:53 +08:00
|
|
|
.*: (e9 82 80 40|40 80 82 e9) ld r12,-32704\(r2\)
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
|
|
|
.*: (4e 80 04 20|20 04 80 4e) bctr
|
2017-09-09 20:25:22 +08:00
|
|
|
\.\.\.
|
2013-10-29 14:10:34 +08:00
|
|
|
|
PowerPC PLT stub tidy
This is in preparation for the next patch adding Spectre variant 2
mitigation for PowerPC and PowerPC64. Besides tidying code involved
in stub output (to reduce the number of places where bctr is output),
the patch adds some user visible features:
1) PowerPC64 ELFv2 global entry stubs now are aligned under the
control of --plt-align, with a default alignment of 32 bytes.
2) PowerPC64 __glink_PLTresolve is no longer padded out with nops.
3) PowerPC32 PLT stubs are aligned under the control of --plt-align,
with the default alignment being 16 bytes as before.
4) The PowerPC32 branch/nop table emitted before __glink_PLTresolve
is now smaller in many cases. It was sized incorrectly when the
__tls_get_addr_opt stub was used, and unnecessarily included space
for local ifuncs.
bfd/
* elf32-ppc.c (GLINK_ENTRY_SIZE): Add parameters, handle
__tls_get_addr_opt, and alignment sizing.
(TLS_GET_ADDR_GLINK_SIZE): Delete.
(is_nonpic_glink_stub): Don't use GLINK_ENTRY_SIZE.
(ppc_elf_get_synthetic_symtab): Recognize stubs spaced at 4, 6,
or 8 insns.
(ppc_elf_link_hash_table_create): Init new ppc_elf_params field.
(allocate_dynrelocs): Use new GLINK_ENTRY_SIZE.
(ppc_elf_size_dynamic_sections): Likewise. Size branch table
by PLT reloc count.
(write_glink_stub): Handle __tls_get_addr_opt stub.
Pad out to size given by GLINK_ENTRY_SIZE.
(ppc_elf_relocate_section): Adjust write_glink_stub call.
(ppc_elf_finish_dynamic_symbol): Likewise.
(ppc_elf_finish_dynamic_sections): Write PLTresolve without using
insn array since so many need rewriting.
* elf32-ppc.h (struct ppc_elf_params): Add plt_stub_align.
* elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Rename from
GLINK_CALL_STUB_SIZE. Add htab param and evaluate to size without
nops. Adjust all uses.
(ppc64_elf_get_synthetic_symtab): Don't use GLINK_CALL_STUB_SIZE
in glink_vma calculation.
(struct ppc_link_hash_table): Add global_entry section pointer.
(create_linkage_sections): Create separate section for global
entry stubs.
(PPC_LO, PPC_HI, PPC_HA): Move earlier.
(size_global_entry_stubs): Handle sizing for aligned stubs.
(ppc64_elf_size_dynamic_sections): Handle global_entry alloc,
and don't stash end of glink branch table in rawsize.
(ppc_build_one_stub): Rewrite stub size calculations.
(build_global_entry_stubs): Use new section.
(ppc64_elf_build_stubs): Don't pad __glink_PLTresolve with nops.
Build lazy link stubs out to end of section. Build global entry
stubs in new section.
gold/
* options.h (plt_align): Support for PowerPC32 too.
* powerpc.cc (Stub_table::stub_align): Heed --plt-align for 32-bit.
(Stub_table::plt_call_size, branch_stub_size): Tidy.
(Stub_table::plt_call_align): Implement using stub_align.
(Output_data_glink::global_entry_align): New function.
(Output_data_glink::global_entry_off): New function.
(Output_data_glink::global_entry_address): Use global_entry_off.
(Output_data_glink::pltresolve_size): New function, replacing
pltresolve_size_ constant. Update all uses.
(Output_data_glink::add_global_entry): Align offset.
(Output_data_glink::set_final_data_size): Use global_entry_align.
(Stub_table::do_write): Don't pad __glink_PLTrelsolve with nops.
Tidy stub output. Use global_entry_off.
ld/
* emultempl/ppc32elf.em (params): Init new field.
(enum ppc32_opt): New enum to define OPTION_* values. Add
OPTION_PLT_ALIGN and OPTION_NO_PLT_ALIGN.
(PARSE_AND_LIST_LONGOPTS): Handle new options.
(PARSE_AND_LIST_ARGS_CASES): Likewise.
(PARSE_AND_LIST_OPTIONS): Likewise. Break up help output.
* emultempl/ppc64elf.em (ppc_add_stub_section): Init alignment
correctly for negative --plt-stub-align.
* testsuite/ld-powerpc/elfv2exe.d,
* testsuite/ld-powerpc/elfv2so.d,
* testsuite/ld-powerpc/relbrlt.d,
* testsuite/ld-powerpc/relbrlt.s,
* testsuite/ld-powerpc/tlsexe.d,
* testsuite/ld-powerpc/tlsexe.r,
* testsuite/ld-powerpc/tlsexe32.d,
* testsuite/ld-powerpc/tlsexe32.g,
* testsuite/ld-powerpc/tlsexe32.r,
* testsuite/ld-powerpc/tlsexetoc.d,
* testsuite/ld-powerpc/tlsexetoc.r,
* testsuite/ld-powerpc/tlsopt5_32.d,
* testsuite/ld-powerpc/tlsso.d,
* testsuite/ld-powerpc/tlstocso.d: Update for changed stub order.
2018-01-13 16:23:41 +08:00
|
|
|
.* <.*\.plt_call\.f2>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (f8 41 00 18|18 00 41 f8) std r2,24\(r1\)
|
PowerPC PLT stub tidy
This is in preparation for the next patch adding Spectre variant 2
mitigation for PowerPC and PowerPC64. Besides tidying code involved
in stub output (to reduce the number of places where bctr is output),
the patch adds some user visible features:
1) PowerPC64 ELFv2 global entry stubs now are aligned under the
control of --plt-align, with a default alignment of 32 bytes.
2) PowerPC64 __glink_PLTresolve is no longer padded out with nops.
3) PowerPC32 PLT stubs are aligned under the control of --plt-align,
with the default alignment being 16 bytes as before.
4) The PowerPC32 branch/nop table emitted before __glink_PLTresolve
is now smaller in many cases. It was sized incorrectly when the
__tls_get_addr_opt stub was used, and unnecessarily included space
for local ifuncs.
bfd/
* elf32-ppc.c (GLINK_ENTRY_SIZE): Add parameters, handle
__tls_get_addr_opt, and alignment sizing.
(TLS_GET_ADDR_GLINK_SIZE): Delete.
(is_nonpic_glink_stub): Don't use GLINK_ENTRY_SIZE.
(ppc_elf_get_synthetic_symtab): Recognize stubs spaced at 4, 6,
or 8 insns.
(ppc_elf_link_hash_table_create): Init new ppc_elf_params field.
(allocate_dynrelocs): Use new GLINK_ENTRY_SIZE.
(ppc_elf_size_dynamic_sections): Likewise. Size branch table
by PLT reloc count.
(write_glink_stub): Handle __tls_get_addr_opt stub.
Pad out to size given by GLINK_ENTRY_SIZE.
(ppc_elf_relocate_section): Adjust write_glink_stub call.
(ppc_elf_finish_dynamic_symbol): Likewise.
(ppc_elf_finish_dynamic_sections): Write PLTresolve without using
insn array since so many need rewriting.
* elf32-ppc.h (struct ppc_elf_params): Add plt_stub_align.
* elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Rename from
GLINK_CALL_STUB_SIZE. Add htab param and evaluate to size without
nops. Adjust all uses.
(ppc64_elf_get_synthetic_symtab): Don't use GLINK_CALL_STUB_SIZE
in glink_vma calculation.
(struct ppc_link_hash_table): Add global_entry section pointer.
(create_linkage_sections): Create separate section for global
entry stubs.
(PPC_LO, PPC_HI, PPC_HA): Move earlier.
(size_global_entry_stubs): Handle sizing for aligned stubs.
(ppc64_elf_size_dynamic_sections): Handle global_entry alloc,
and don't stash end of glink branch table in rawsize.
(ppc_build_one_stub): Rewrite stub size calculations.
(build_global_entry_stubs): Use new section.
(ppc64_elf_build_stubs): Don't pad __glink_PLTresolve with nops.
Build lazy link stubs out to end of section. Build global entry
stubs in new section.
gold/
* options.h (plt_align): Support for PowerPC32 too.
* powerpc.cc (Stub_table::stub_align): Heed --plt-align for 32-bit.
(Stub_table::plt_call_size, branch_stub_size): Tidy.
(Stub_table::plt_call_align): Implement using stub_align.
(Output_data_glink::global_entry_align): New function.
(Output_data_glink::global_entry_off): New function.
(Output_data_glink::global_entry_address): Use global_entry_off.
(Output_data_glink::pltresolve_size): New function, replacing
pltresolve_size_ constant. Update all uses.
(Output_data_glink::add_global_entry): Align offset.
(Output_data_glink::set_final_data_size): Use global_entry_align.
(Stub_table::do_write): Don't pad __glink_PLTrelsolve with nops.
Tidy stub output. Use global_entry_off.
ld/
* emultempl/ppc32elf.em (params): Init new field.
(enum ppc32_opt): New enum to define OPTION_* values. Add
OPTION_PLT_ALIGN and OPTION_NO_PLT_ALIGN.
(PARSE_AND_LIST_LONGOPTS): Handle new options.
(PARSE_AND_LIST_ARGS_CASES): Likewise.
(PARSE_AND_LIST_OPTIONS): Likewise. Break up help output.
* emultempl/ppc64elf.em (ppc_add_stub_section): Init alignment
correctly for negative --plt-stub-align.
* testsuite/ld-powerpc/elfv2exe.d,
* testsuite/ld-powerpc/elfv2so.d,
* testsuite/ld-powerpc/relbrlt.d,
* testsuite/ld-powerpc/relbrlt.s,
* testsuite/ld-powerpc/tlsexe.d,
* testsuite/ld-powerpc/tlsexe.r,
* testsuite/ld-powerpc/tlsexe32.d,
* testsuite/ld-powerpc/tlsexe32.g,
* testsuite/ld-powerpc/tlsexe32.r,
* testsuite/ld-powerpc/tlsexetoc.d,
* testsuite/ld-powerpc/tlsexetoc.r,
* testsuite/ld-powerpc/tlsopt5_32.d,
* testsuite/ld-powerpc/tlsso.d,
* testsuite/ld-powerpc/tlstocso.d: Update for changed stub order.
2018-01-13 16:23:41 +08:00
|
|
|
.*: (e9 82 80 30|30 80 82 e9) ld r12,-32720\(r2\)
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
|
|
|
.*: (4e 80 04 20|20 04 80 4e) bctr
|
2017-09-09 20:25:22 +08:00
|
|
|
\.\.\.
|
2013-10-29 14:10:34 +08:00
|
|
|
|
2017-08-06 20:34:25 +08:00
|
|
|
.* <f1>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (3c 4c 00 02|02 00 4c 3c) addis r2,r12,2
|
2017-08-06 20:34:25 +08:00
|
|
|
.*: (38 42 .. ..|.. .. 42 38) addi r2,r2,.*
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (7c 08 02 a6|a6 02 08 7c) mflr r0
|
|
|
|
.*: (f8 21 ff e1|e1 ff 21 f8) stdu r1,-32\(r1\)
|
|
|
|
.*: (f8 01 00 30|30 00 01 f8) std r0,48\(r1\)
|
2018-04-09 07:52:53 +08:00
|
|
|
.*: (4b ff ff ad|ad ff ff 4b) bl .*\.plt_call\.f1>
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (e8 62 80 08|08 80 62 e8) ld r3,-32760\(r2\)
|
PowerPC PLT stub tidy
This is in preparation for the next patch adding Spectre variant 2
mitigation for PowerPC and PowerPC64. Besides tidying code involved
in stub output (to reduce the number of places where bctr is output),
the patch adds some user visible features:
1) PowerPC64 ELFv2 global entry stubs now are aligned under the
control of --plt-align, with a default alignment of 32 bytes.
2) PowerPC64 __glink_PLTresolve is no longer padded out with nops.
3) PowerPC32 PLT stubs are aligned under the control of --plt-align,
with the default alignment being 16 bytes as before.
4) The PowerPC32 branch/nop table emitted before __glink_PLTresolve
is now smaller in many cases. It was sized incorrectly when the
__tls_get_addr_opt stub was used, and unnecessarily included space
for local ifuncs.
bfd/
* elf32-ppc.c (GLINK_ENTRY_SIZE): Add parameters, handle
__tls_get_addr_opt, and alignment sizing.
(TLS_GET_ADDR_GLINK_SIZE): Delete.
(is_nonpic_glink_stub): Don't use GLINK_ENTRY_SIZE.
(ppc_elf_get_synthetic_symtab): Recognize stubs spaced at 4, 6,
or 8 insns.
(ppc_elf_link_hash_table_create): Init new ppc_elf_params field.
(allocate_dynrelocs): Use new GLINK_ENTRY_SIZE.
(ppc_elf_size_dynamic_sections): Likewise. Size branch table
by PLT reloc count.
(write_glink_stub): Handle __tls_get_addr_opt stub.
Pad out to size given by GLINK_ENTRY_SIZE.
(ppc_elf_relocate_section): Adjust write_glink_stub call.
(ppc_elf_finish_dynamic_symbol): Likewise.
(ppc_elf_finish_dynamic_sections): Write PLTresolve without using
insn array since so many need rewriting.
* elf32-ppc.h (struct ppc_elf_params): Add plt_stub_align.
* elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Rename from
GLINK_CALL_STUB_SIZE. Add htab param and evaluate to size without
nops. Adjust all uses.
(ppc64_elf_get_synthetic_symtab): Don't use GLINK_CALL_STUB_SIZE
in glink_vma calculation.
(struct ppc_link_hash_table): Add global_entry section pointer.
(create_linkage_sections): Create separate section for global
entry stubs.
(PPC_LO, PPC_HI, PPC_HA): Move earlier.
(size_global_entry_stubs): Handle sizing for aligned stubs.
(ppc64_elf_size_dynamic_sections): Handle global_entry alloc,
and don't stash end of glink branch table in rawsize.
(ppc_build_one_stub): Rewrite stub size calculations.
(build_global_entry_stubs): Use new section.
(ppc64_elf_build_stubs): Don't pad __glink_PLTresolve with nops.
Build lazy link stubs out to end of section. Build global entry
stubs in new section.
gold/
* options.h (plt_align): Support for PowerPC32 too.
* powerpc.cc (Stub_table::stub_align): Heed --plt-align for 32-bit.
(Stub_table::plt_call_size, branch_stub_size): Tidy.
(Stub_table::plt_call_align): Implement using stub_align.
(Output_data_glink::global_entry_align): New function.
(Output_data_glink::global_entry_off): New function.
(Output_data_glink::global_entry_address): Use global_entry_off.
(Output_data_glink::pltresolve_size): New function, replacing
pltresolve_size_ constant. Update all uses.
(Output_data_glink::add_global_entry): Align offset.
(Output_data_glink::set_final_data_size): Use global_entry_align.
(Stub_table::do_write): Don't pad __glink_PLTrelsolve with nops.
Tidy stub output. Use global_entry_off.
ld/
* emultempl/ppc32elf.em (params): Init new field.
(enum ppc32_opt): New enum to define OPTION_* values. Add
OPTION_PLT_ALIGN and OPTION_NO_PLT_ALIGN.
(PARSE_AND_LIST_LONGOPTS): Handle new options.
(PARSE_AND_LIST_ARGS_CASES): Likewise.
(PARSE_AND_LIST_OPTIONS): Likewise. Break up help output.
* emultempl/ppc64elf.em (ppc_add_stub_section): Init alignment
correctly for negative --plt-stub-align.
* testsuite/ld-powerpc/elfv2exe.d,
* testsuite/ld-powerpc/elfv2so.d,
* testsuite/ld-powerpc/relbrlt.d,
* testsuite/ld-powerpc/relbrlt.s,
* testsuite/ld-powerpc/tlsexe.d,
* testsuite/ld-powerpc/tlsexe.r,
* testsuite/ld-powerpc/tlsexe32.d,
* testsuite/ld-powerpc/tlsexe32.g,
* testsuite/ld-powerpc/tlsexe32.r,
* testsuite/ld-powerpc/tlsexetoc.d,
* testsuite/ld-powerpc/tlsexetoc.r,
* testsuite/ld-powerpc/tlsopt5_32.d,
* testsuite/ld-powerpc/tlsso.d,
* testsuite/ld-powerpc/tlstocso.d: Update for changed stub order.
2018-01-13 16:23:41 +08:00
|
|
|
.*: (4b ff ff c5|c5 ff ff 4b) bl .*\.plt_call\.f2>
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (e8 41 00 18|18 00 41 e8) ld r2,24\(r1\)
|
|
|
|
.*: (e8 62 80 10|10 80 62 e8) ld r3,-32752\(r2\)
|
2018-04-09 07:52:53 +08:00
|
|
|
.*: (4b ff ff 79|79 ff ff 4b) bl .*\.plt_call\.f3>
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (e8 41 00 18|18 00 41 e8) ld r2,24\(r1\)
|
2017-09-09 20:25:22 +08:00
|
|
|
.*: (4b ff ff 51|51 ff ff 4b) bl .*\.plt_call\.f4>
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (e8 41 00 18|18 00 41 e8) ld r2,24\(r1\)
|
|
|
|
.*: (e8 01 00 30|30 00 01 e8) ld r0,48\(r1\)
|
|
|
|
.*: (38 21 00 20|20 00 21 38) addi r1,r1,32
|
|
|
|
.*: (7c 08 03 a6|a6 03 08 7c) mtlr r0
|
|
|
|
.*: (4e 80 00 20|20 00 80 4e) blr
|
2017-08-06 20:34:25 +08:00
|
|
|
.*
|
|
|
|
.*
|
2013-10-29 14:10:34 +08:00
|
|
|
|
2017-08-06 20:34:25 +08:00
|
|
|
.* <__glink_PLTresolve>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (7c 08 02 a6|a6 02 08 7c) mflr r0
|
|
|
|
.*: (42 9f 00 05|05 00 9f 42) bcl .*
|
|
|
|
.*: (7d 68 02 a6|a6 02 68 7d) mflr r11
|
PPC64_OPT_LOCALENTRY
ELFv2 functions with localentry:0 are those with a single entry point,
ie. global entry == local entry, and that have no requirement on r2 or
r12, and guarantee r2 is unchanged on return. Such an external
function can be called via the PLT without saving r2 or restoring it
on return, avoiding a common load-hit-store for small functions. The
optimization is attractive. The TOC pointer load-hit-store is a major
reason why calls to small functions that need no register saves, or
with shrink-wrap, no register saves on a fast path, are slow on
powerpc64le.
To be safe, this optimization needs ld.so support to check that the
run-time matches link-time function implementation. If a function
in a shared library with st_other localentry non-zero is called
without saving and restoring r2, r2 will be trashed on return, leading
to segfaults. For that reason the optimization does not happen for
weak functions since a weak definition is a fairly solid hint that the
function will likely be overridden. I'm also not enabling the
optimization by default unless glibc-2.26 is detected, which should
have the ld.so checks implemented.
bfd/
* elf64-ppc.c (struct ppc_link_hash_table): Add has_plt_localentry0.
(ppc64_elf_merge_symbol_attribute): Merge localentry bits from
dynamic objects.
(is_elfv2_localentry0): New function.
(ppc64_elf_tls_setup): Default params->plt_localentry0.
(plt_stub_size): Adjust size for tls_get_addr_opt stub.
(build_tls_get_addr_stub): Use a simpler stub when r2 is not saved.
(ppc64_elf_size_stubs): Leave stub_type as ppc_stub_plt_call for
optimized localentry:0 stubs.
(ppc64_elf_build_stubs): Save r2 in ELFv2 __glink_PLTresolve.
(ppc64_elf_relocate_section): Leave nop unchanged for optimized
localentry:0 stubs.
(ppc64_elf_finish_dynamic_sections): Set PPC64_OPT_LOCALENTRY in
DT_PPC64_OPT.
* elf64-ppc.h (struct ppc64_elf_params): Add plt_localentry0.
include/
* elf/ppc64.h (PPC64_OPT_LOCALENTRY): Define.
ld/
* emultempl/ppc64elf.em (params): Init plt_localentry0 field.
(enum ppc64_opt): New, replacing OPTION_* defines. Add
OPTION_PLT_LOCALENTRY, and OPTION_NO_PLT_LOCALENTRY.
(PARSE_AND_LIST_*): Support --plt-localentry and --no-plt-localentry.
* testsuite/ld-powerpc/elfv2so.d: Update.
* testsuite/ld-powerpc/powerpc.exp (TLS opt 5): Use --no-plt-localentry.
* testsuite/ld-powerpc/tlsopt5.d: Update.
2017-05-26 08:32:29 +08:00
|
|
|
.*: (18 00 41 f8|f8 41 00 18) std r2,24\(r1\)
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (e8 4b ff f0|f0 ff 4b e8) ld r2,-16\(r11\)
|
|
|
|
.*: (7c 08 03 a6|a6 03 08 7c) mtlr r0
|
|
|
|
.*: (7d 8b 60 50|50 60 8b 7d) subf r12,r11,r12
|
|
|
|
.*: (7d 62 5a 14|14 5a 62 7d) add r11,r2,r11
|
|
|
|
.*: (38 0c ff d0|d0 ff 0c 38) addi r0,r12,-48
|
|
|
|
.*: (e9 8b 00 00|00 00 8b e9) ld r12,0\(r11\)
|
|
|
|
.*: (78 00 f0 82|82 f0 00 78) rldicl r0,r0,62,2
|
|
|
|
.*: (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
|
|
|
.*: (e9 6b 00 08|08 00 6b e9) ld r11,8\(r11\)
|
|
|
|
.*: (4e 80 04 20|20 04 80 4e) bctr
|
2013-10-29 14:10:34 +08:00
|
|
|
|
|
|
|
.* <f3@plt>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (4b ff ff c8|c8 ff ff 4b) b .* <__glink_PLTresolve>
|
2013-10-29 14:10:34 +08:00
|
|
|
|
|
|
|
.* <f2@plt>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (4b ff ff c4|c4 ff ff 4b) b .* <__glink_PLTresolve>
|
2013-10-29 14:10:34 +08:00
|
|
|
|
|
|
|
.* <f4@plt>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (4b ff ff c0|c0 ff ff 4b) b .* <__glink_PLTresolve>
|
2013-10-29 14:10:34 +08:00
|
|
|
|
|
|
|
.* <f1@plt>:
|
2015-04-21 17:48:24 +08:00
|
|
|
.*: (4b ff ff bc|bc ff ff 4b) b .* <__glink_PLTresolve>
|