Commit 4bdc3b7f authored by Arjan van de Ven's avatar Arjan van de Ven Committed by Linus Torvalds

[PATCH] x86_64: Basic reorder infrastructure

This patch puts the infrastructure in place to allow for a reordering of
functions based inside the vmlinux. The general idea is that it is possible
to put all "common" functions into the first 2Mb of the code, so that they
are covered by one TLB entry. This as opposed to the current situation where
a typical vmlinux covers about 3.5Mb (on x86-64) and thus 2 TLB entries.

This is done by enabling the -ffunction-sections flag in gcc, which puts
each function in its own ELF section, so that the linker can then order them
in a way defined by the linker script.

As per previous discussions, Linus said he wanted a "static" list for this,
eg a list provided by the kernel tarbal, so that most people have the same
ordering at least. A script is provided to create this list based on
readprofile(1) output. The included list is provisional, and entirely biased
on my own testbox and me running a few kernel compiles and some other
things.

I think that to get to a better list we need to invite people to submit
their own profiles, and somehow add those all up and base the final list on
that. I'm willing to do that effort if this is ends up being the prefered
approach. Such an effort probably needs to be repeated like once a year or
so to adopt to the changing nature of the kernel.

Made it a CONFIG with default n because it increases link times
dramatically.
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9b2a13b9
...@@ -464,6 +464,14 @@ config SECCOMP ...@@ -464,6 +464,14 @@ config SECCOMP
source kernel/Kconfig.hz source kernel/Kconfig.hz
config REORDER
bool "Function reordering"
default n
help
This option enables the toolchain to reorder functions for a more
optimal TLB usage. If you have pretty much any version of binutils,
this can increase your kernel build time by roughly one minute.
endmenu endmenu
# #
......
...@@ -36,6 +36,7 @@ CFLAGS += -m64 ...@@ -36,6 +36,7 @@ CFLAGS += -m64
CFLAGS += -mno-red-zone CFLAGS += -mno-red-zone
CFLAGS += -mcmodel=kernel CFLAGS += -mcmodel=kernel
CFLAGS += -pipe CFLAGS += -pipe
cflags-$(CONFIG_REORDER) += -ffunction-sections
# this makes reading assembly source easier, but produces worse code # this makes reading assembly source easier, but produces worse code
# actually it makes the kernel smaller too. # actually it makes the kernel smaller too.
CFLAGS += -fno-reorder-blocks CFLAGS += -fno-reorder-blocks
......
*(.text.flush_thread)
*(.text.check_poison_obj)
*(.text.copy_page)
*(.text.__set_personality)
*(.text.gart_map_sg)
*(.text.kmem_cache_free)
*(.text.find_get_page)
*(.text._raw_spin_lock)
*(.text.ide_outb)
*(.text.unmap_vmas)
*(.text.copy_page_range)
*(.text.kprobe_handler)
*(.text.__handle_mm_fault)
*(.text.__d_lookup)
*(.text.copy_user_generic)
*(.text.__link_path_walk)
*(.text.get_page_from_freelist)
*(.text.kmem_cache_alloc)
*(.text.drive_cmd_intr)
*(.text.ia32_setup_sigcontext)
*(.text.huge_pte_offset)
*(.text.do_page_fault)
*(.text.page_remove_rmap)
*(.text.release_pages)
*(.text.ide_end_request)
*(.text.__mutex_lock_slowpath)
*(.text.__find_get_block)
*(.text.kfree)
*(.text.vfs_read)
*(.text._raw_spin_unlock)
*(.text.free_hot_cold_page)
*(.text.fget_light)
*(.text.schedule)
*(.text.memcmp)
*(.text.touch_atime)
*(.text.__might_sleep)
*(.text.__down_read_trylock)
*(.text.arch_pick_mmap_layout)
*(.text.find_vma)
*(.text.__make_request)
*(.text.do_generic_mapping_read)
*(.text.mutex_lock_interruptible)
*(.text.__generic_file_aio_read)
*(.text._atomic_dec_and_lock)
*(.text.__wake_up_bit)
*(.text.add_to_page_cache)
*(.text.cache_alloc_debugcheck_after)
*(.text.vm_normal_page)
*(.text.mutex_debug_check_no_locks_freed)
*(.text.net_rx_action)
*(.text.__find_first_zero_bit)
*(.text.put_page)
*(.text._raw_read_lock)
*(.text.__delay)
*(.text.dnotify_parent)
*(.text.do_path_lookup)
*(.text.do_sync_read)
*(.text.do_lookup)
*(.text.bit_waitqueue)
*(.text.file_read_actor)
*(.text.strncpy_from_user)
*(.text.__pagevec_lru_add_active)
*(.text.fget)
*(.text.dput)
*(.text.__strnlen_user)
*(.text.inotify_inode_queue_event)
*(.text.rw_verify_area)
*(.text.ide_intr)
*(.text.inotify_dentry_parent_queue_event)
*(.text.permission)
*(.text.memscan)
*(.text.hpet_rtc_interrupt)
*(.text.do_mmap_pgoff)
*(.text.current_fs_time)
*(.text.vfs_getattr)
*(.text.kmem_flagcheck)
*(.text.mark_page_accessed)
*(.text.free_pages_and_swap_cache)
*(.text.generic_fillattr)
*(.text.__block_prepare_write)
*(.text.__set_page_dirty_nobuffers)
*(.text.link_path_walk)
*(.text.find_get_pages_tag)
*(.text.ide_do_request)
*(.text.__alloc_pages)
*(.text.generic_permission)
*(.text.mod_page_state_offset)
*(.text.free_pgd_range)
*(.text.generic_file_buffered_write)
*(.text.number)
*(.text.ide_do_rw_disk)
*(.text.__brelse)
*(.text.__mod_page_state_offset)
*(.text.rotate_reclaimable_page)
*(.text.find_vma_prepare)
*(.text.find_vma_prev)
*(.text.lru_cache_add_active)
*(.text.__kmalloc_track_caller)
*(.text.smp_invalidate_interrupt)
*(.text.handle_IRQ_event)
*(.text.__find_get_block_slow)
*(.text.do_wp_page)
*(.text.do_select)
*(.text.set_user_nice)
*(.text.sys_read)
*(.text.do_munmap)
*(.text.csum_partial)
*(.text.__do_softirq)
*(.text.may_open)
*(.text.getname)
*(.text.get_empty_filp)
*(.text.__fput)
*(.text.remove_mapping)
*(.text.filp_ctor)
*(.text.poison_obj)
*(.text.unmap_region)
*(.text.test_set_page_writeback)
*(.text.__do_page_cache_readahead)
*(.text.sock_def_readable)
*(.text.ide_outl)
*(.text.shrink_zone)
*(.text.rb_insert_color)
*(.text.get_request)
*(.text.sys_pread64)
*(.text.spin_bug)
*(.text.ide_outsl)
*(.text.mask_and_ack_8259A)
*(.text.filemap_nopage)
*(.text.page_add_file_rmap)
*(.text.find_lock_page)
*(.text.tcp_poll)
*(.text.__mark_inode_dirty)
*(.text.file_ra_state_init)
*(.text.generic_file_llseek)
*(.text.__pagevec_lru_add)
*(.text.page_cache_readahead)
*(.text.n_tty_receive_buf)
*(.text.zonelist_policy)
*(.text.vma_adjust)
*(.text.test_clear_page_dirty)
*(.text.sync_buffer)
*(.text.do_exit)
*(.text.__bitmap_weight)
*(.text.alloc_pages_current)
*(.text.get_unused_fd)
*(.text.zone_watermark_ok)
*(.text.cpuset_update_task_memory_state)
*(.text.__bitmap_empty)
*(.text.sys_munmap)
*(.text.__inode_dir_notify)
*(.text.__generic_file_aio_write_nolock)
*(.text.__pte_alloc)
*(.text.sys_select)
*(.text.vm_acct_memory)
*(.text.vfs_write)
*(.text.__lru_add_drain)
*(.text.prio_tree_insert)
*(.text.generic_file_aio_read)
*(.text.vma_merge)
*(.text.block_write_full_page)
*(.text.__page_set_anon_rmap)
*(.text.apic_timer_interrupt)
*(.text.release_console_sem)
*(.text.sys_write)
*(.text.sys_brk)
*(.text.dup_mm)
*(.text.read_current_timer)
*(.text.ll_rw_block)
*(.text.blk_rq_map_sg)
*(.text.dbg_userword)
*(.text.__block_commit_write)
*(.text.cache_grow)
*(.text.copy_strings)
*(.text.release_task)
*(.text.do_sync_write)
*(.text.unlock_page)
*(.text.load_elf_binary)
*(.text.__follow_mount)
*(.text.__getblk)
*(.text.do_sys_open)
*(.text.current_kernel_time)
*(.text.call_rcu)
*(.text.write_chan)
*(.text.vsnprintf)
*(.text.dummy_inode_setsecurity)
*(.text.submit_bh)
*(.text.poll_freewait)
*(.text.bio_alloc_bioset)
*(.text.skb_clone)
*(.text.page_waitqueue)
*(.text.__mutex_lock_interruptible_slowpath)
*(.text.get_index)
*(.text.csum_partial_copy_generic)
*(.text.bad_range)
*(.text.remove_vma)
*(.text.cp_new_stat)
*(.text.alloc_arraycache)
*(.text.test_clear_page_writeback)
*(.text.strsep)
*(.text.open_namei)
*(.text._raw_read_unlock)
*(.text.get_vma_policy)
*(.text.__down_write_trylock)
*(.text.find_get_pages)
*(.text.tcp_rcv_established)
*(.text.generic_make_request)
*(.text.__block_write_full_page)
*(.text.cfq_set_request)
*(.text.sys_inotify_init)
*(.text.split_vma)
*(.text.__mod_timer)
*(.text.get_options)
*(.text.vma_link)
*(.text.mpage_writepages)
*(.text.truncate_complete_page)
*(.text.tcp_recvmsg)
*(.text.sigprocmask)
*(.text.filemap_populate)
*(.text.sys_close)
*(.text.inotify_dev_queue_event)
*(.text.do_task_stat)
*(.text.__dentry_open)
*(.text.unlink_file_vma)
*(.text.__pollwait)
*(.text.packet_rcv_spkt)
*(.text.drop_buffers)
*(.text.free_pgtables)
*(.text.generic_file_direct_write)
*(.text.copy_process)
*(.text.netif_receive_skb)
*(.text.dnotify_flush)
*(.text.print_bad_pte)
*(.text.anon_vma_unlink)
*(.text.sys_mprotect)
*(.text.sync_sb_inodes)
*(.text.find_inode_fast)
*(.text.dummy_inode_readlink)
*(.text.putname)
*(.text.init_smp_flush)
*(.text.dbg_redzone2)
*(.text.sk_run_filter)
*(.text.may_expand_vm)
*(.text.generic_file_aio_write)
*(.text.find_next_zero_bit)
*(.text.file_kill)
*(.text.audit_getname)
*(.text.arch_unmap_area_topdown)
*(.text.alloc_page_vma)
*(.text.tcp_transmit_skb)
*(.text.rb_next)
*(.text.dbg_redzone1)
*(.text.generic_file_mmap)
*(.text.vfs_fstat)
*(.text.sys_time)
*(.text.page_lock_anon_vma)
*(.text.get_unmapped_area)
*(.text.remote_llseek)
*(.text.__up_read)
*(.text.fd_install)
*(.text.eventpoll_init_file)
*(.text.dma_alloc_coherent)
*(.text.create_empty_buffers)
*(.text.__mutex_unlock_slowpath)
*(.text.dup_fd)
*(.text.d_alloc)
*(.text.tty_ldisc_try)
*(.text.sys_stime)
*(.text.__rb_rotate_right)
*(.text.d_validate)
*(.text.rb_erase)
*(.text.path_release)
*(.text.memmove)
*(.text.invalidate_complete_page)
*(.text.clear_inode)
*(.text.cache_estimate)
*(.text.alloc_buffer_head)
*(.text.smp_call_function_interrupt)
*(.text.flush_tlb_others)
*(.text.file_move)
*(.text.balance_dirty_pages_ratelimited)
*(.text.vma_prio_tree_add)
*(.text.timespec_trunc)
*(.text.mempool_alloc)
*(.text.iget_locked)
*(.text.d_alloc_root)
*(.text.cpuset_populate_dir)
*(.text.anon_vma_prepare)
*(.text.sys_newstat)
*(.text.alloc_page_interleave)
*(.text.__path_lookup_intent_open)
*(.text.__pagevec_free)
*(.text.inode_init_once)
*(.text.free_vfsmnt)
*(.text.__user_walk_fd)
*(.text.cfq_idle_slice_timer)
*(.text.sys_mmap)
*(.text.sys_llseek)
*(.text.prio_tree_remove)
*(.text.filp_close)
*(.text.file_permission)
*(.text.vma_prio_tree_remove)
*(.text.tcp_ack)
*(.text.nameidata_to_filp)
*(.text.sys_lseek)
*(.text.percpu_counter_mod)
*(.text.igrab)
*(.text.__bread)
*(.text.alloc_inode)
*(.text.filldir)
*(.text.__rb_rotate_left)
*(.text.irq_affinity_write_proc)
*(.text.init_request_from_bio)
*(.text.find_or_create_page)
*(.text.tty_poll)
*(.text.tcp_sendmsg)
*(.text.ide_wait_stat)
*(.text.free_buffer_head)
*(.text.flush_signal_handlers)
*(.text.tcp_v4_rcv)
*(.text.nr_blockdev_pages)
*(.text.locks_remove_flock)
*(.text.__iowrite32_copy)
*(.text.do_filp_open)
*(.text.try_to_release_page)
*(.text.page_add_new_anon_rmap)
*(.text.kmem_cache_size)
*(.text.eth_type_trans)
*(.text.try_to_free_buffers)
*(.text.schedule_tail)
*(.text.proc_lookup)
*(.text.no_llseek)
*(.text.kfree_skbmem)
*(.text.do_wait)
*(.text.do_mpage_readpage)
*(.text.vfs_stat_fd)
*(.text.tty_write)
*(.text.705)
*(.text.sync_page)
*(.text.__remove_shared_vm_struct)
*(.text.__kfree_skb)
*(.text.sock_poll)
*(.text.get_request_wait)
*(.text.do_sigaction)
*(.text.do_brk)
*(.text.tcp_event_data_recv)
*(.text.read_chan)
*(.text.pipe_writev)
*(.text.__emul_lookup_dentry)
*(.text.rtc_get_rtc_time)
*(.text.print_objinfo)
*(.text.file_update_time)
*(.text.do_signal)
*(.text.disable_8259A_irq)
*(.text.blk_queue_bounce)
*(.text.__anon_vma_link)
*(.text.__vma_link)
*(.text.vfs_rename)
*(.text.sys_newlstat)
*(.text.sys_newfstat)
*(.text.sys_mknod)
*(.text.__show_regs)
*(.text.iput)
*(.text.get_signal_to_deliver)
*(.text.flush_tlb_page)
*(.text.debug_mutex_wake_waiter)
*(.text.copy_thread)
*(.text.clear_page_dirty_for_io)
*(.text.buffer_io_error)
*(.text.vfs_permission)
*(.text.truncate_inode_pages_range)
*(.text.sys_recvfrom)
*(.text.remove_suid)
*(.text.mark_buffer_dirty)
*(.text.local_bh_enable)
*(.text.get_zeroed_page)
*(.text.get_vmalloc_info)
*(.text.flush_old_exec)
*(.text.dummy_inode_permission)
*(.text.__bio_add_page)
*(.text.prio_tree_replace)
*(.text.notify_change)
*(.text.mntput_no_expire)
*(.text.fput)
*(.text.__end_that_request_first)
*(.text.wake_up_bit)
*(.text.unuse_mm)
*(.text.skb_release_data)
*(.text.shrink_icache_memory)
*(.text.sched_balance_self)
*(.text.__pmd_alloc)
*(.text.pipe_poll)
*(.text.normal_poll)
*(.text.__free_pages)
*(.text.follow_mount)
*(.text.cdrom_start_packet_command)
*(.text.blk_recount_segments)
*(.text.bio_put)
*(.text.__alloc_skb)
*(.text.__wake_up)
*(.text.vm_stat_account)
*(.text.sys_fcntl)
*(.text.sys_fadvise64)
*(.text._raw_write_unlock)
*(.text.__pud_alloc)
*(.text.alloc_page_buffers)
*(.text.vfs_llseek)
*(.text.sockfd_lookup)
*(.text._raw_write_lock)
*(.text.put_compound_page)
*(.text.prune_dcache)
*(.text.pipe_readv)
*(.text.mempool_free)
*(.text.make_ahead_window)
*(.text.lru_add_drain)
*(.text.constant_test_bit)
*(.text.__clear_user)
*(.text.arch_unmap_area)
*(.text.anon_vma_link)
*(.text.sys_chroot)
*(.text.setup_arg_pages)
*(.text.radix_tree_preload)
*(.text.init_rwsem)
*(.text.generic_osync_inode)
*(.text.generic_delete_inode)
*(.text.do_sys_poll)
*(.text.dev_queue_xmit)
*(.text.default_llseek)
*(.text.__writeback_single_inode)
*(.text.vfs_ioctl)
*(.text.__up_write)
*(.text.unix_poll)
*(.text.sys_rt_sigprocmask)
*(.text.sock_recvmsg)
*(.text.recalc_bh_state)
*(.text.__put_unused_fd)
*(.text.process_backlog)
*(.text.locks_remove_posix)
*(.text.lease_modify)
*(.text.expand_files)
*(.text.end_buffer_read_nobh)
*(.text.d_splice_alias)
*(.text.debug_mutex_init_waiter)
*(.text.copy_from_user)
*(.text.cap_vm_enough_memory)
*(.text.show_vfsmnt)
*(.text.release_sock)
*(.text.pfifo_fast_enqueue)
*(.text.half_md4_transform)
*(.text.fs_may_remount_ro)
*(.text.do_fork)
*(.text.copy_hugetlb_page_range)
*(.text.cache_free_debugcheck)
*(.text.__tcp_select_window)
*(.text.task_handoff_register)
*(.text.sys_open)
*(.text.strlcpy)
*(.text.skb_copy_datagram_iovec)
*(.text.set_up_list3s)
*(.text.release_open_intent)
*(.text.qdisc_restart)
*(.text.n_tty_chars_in_buffer)
*(.text.inode_change_ok)
*(.text.__downgrade_write)
*(.text.debug_mutex_unlock)
*(.text.add_timer_randomness)
*(.text.sock_common_recvmsg)
*(.text.set_bh_page)
*(.text.printk_lock)
*(.text.path_release_on_umount)
*(.text.ip_output)
*(.text.ide_build_dmatable)
*(.text.__get_user_8)
*(.text.end_buffer_read_sync)
*(.text.__d_path)
*(.text.d_move)
*(.text.del_timer)
*(.text.constant_test_bit)
*(.text.blockable_page_cache_readahead)
*(.text.tty_read)
*(.text.sys_readlink)
*(.text.sys_faccessat)
*(.text.read_swap_cache_async)
*(.text.pty_write_room)
*(.text.page_address_in_vma)
*(.text.kthread)
*(.text.cfq_exit_io_context)
*(.text.__tcp_push_pending_frames)
*(.text.sys_pipe)
*(.text.submit_bio)
*(.text.pid_revalidate)
*(.text.page_referenced_file)
*(.text.lock_sock)
*(.text.get_page_state_node)
*(.text.generic_block_bmap)
*(.text.do_setitimer)
*(.text.dev_queue_xmit_nit)
*(.text.copy_from_read_buf)
*(.text.__const_udelay)
*(.text.console_conditional_schedule)
*(.text.wake_up_new_task)
*(.text.wait_for_completion_interruptible)
*(.text.tcp_rcv_rtt_update)
*(.text.sys_mlockall)
*(.text.set_fs_altroot)
*(.text.schedule_timeout)
*(.text.nr_free_pagecache_pages)
*(.text.nf_iterate)
*(.text.mapping_tagged)
*(.text.ip_queue_xmit)
*(.text.ip_local_deliver)
*(.text.follow_page)
*(.text.elf_map)
*(.text.dummy_file_permission)
*(.text.dispose_list)
*(.text.dentry_open)
*(.text.dentry_iput)
*(.text.bio_alloc)
*(.text.alloc_skb_from_cache)
*(.text.wait_on_page_bit)
*(.text.vfs_readdir)
*(.text.vfs_lstat)
*(.text.seq_escape)
*(.text.__posix_lock_file)
*(.text.mm_release)
*(.text.kref_put)
*(.text.ip_rcv)
*(.text.__iget)
*(.text.free_pages)
*(.text.find_mergeable_anon_vma)
*(.text.find_extend_vma)
*(.text.dummy_inode_listsecurity)
*(.text.bio_add_page)
*(.text.__vm_enough_memory)
*(.text.vfs_stat)
*(.text.tty_paranoia_check)
*(.text.tcp_read_sock)
*(.text.tcp_data_queue)
*(.text.sys_uname)
*(.text.sys_renameat)
*(.text.__strncpy_from_user)
*(.text.__mutex_init)
*(.text.__lookup_hash)
*(.text.kref_get)
*(.text.ip_route_input)
*(.text.__insert_inode_hash)
*(.text.do_sock_write)
*(.text.blk_done_softirq)
*(.text.__wake_up_sync)
*(.text.__vma_link_rb)
*(.text.tty_ioctl)
*(.text.tracesys)
*(.text.sys_getdents)
*(.text.sys_dup)
*(.text.stub_execve)
*(.text.sha_transform)
*(.text.radix_tree_tag_clear)
*(.text.put_unused_fd)
*(.text.put_files_struct)
*(.text.mpage_readpages)
*(.text.may_delete)
*(.text.kmem_cache_create)
*(.text.ip_mc_output)
*(.text.interleave_nodes)
*(.text.groups_search)
*(.text.generic_drop_inode)
*(.text.generic_commit_write)
*(.text.fcntl_setlk)
*(.text.exit_mmap)
*(.text.end_page_writeback)
*(.text.__d_rehash)
*(.text.debug_mutex_free_waiter)
*(.text.csum_ipv6_magic)
*(.text.count)
*(.text.cleanup_rbuf)
*(.text.check_spinlock_acquired_node)
*(.text.can_vma_merge_after)
*(.text.bio_endio)
*(.text.alloc_pidmap)
*(.text.write_ldt)
*(.text.vmtruncate_range)
*(.text.vfs_create)
*(.text.__user_walk)
*(.text.update_send_head)
*(.text.unmap_underlying_metadata)
*(.text.tty_ldisc_deref)
*(.text.tcp_setsockopt)
*(.text.tcp_send_ack)
*(.text.sys_pause)
*(.text.sys_gettimeofday)
*(.text.sync_dirty_buffer)
*(.text.strncmp)
*(.text.release_posix_timer)
*(.text.proc_file_read)
*(.text.prepare_to_wait)
*(.text.locks_mandatory_locked)
*(.text.interruptible_sleep_on_timeout)
*(.text.inode_sub_bytes)
*(.text.in_group_p)
*(.text.hrtimer_try_to_cancel)
*(.text.filldir64)
*(.text.fasync_helper)
*(.text.dummy_sb_pivotroot)
*(.text.d_lookup)
*(.text.d_instantiate)
*(.text.__d_find_alias)
*(.text.cpu_idle_wait)
*(.text.cond_resched_lock)
*(.text.chown_common)
*(.text.blk_congestion_wait)
*(.text.activate_page)
*(.text.unlock_buffer)
*(.text.tty_wakeup)
*(.text.tcp_v4_do_rcv)
*(.text.tcp_current_mss)
*(.text.sys_openat)
*(.text.sys_fchdir)
*(.text.strnlen_user)
*(.text.strnlen)
*(.text.strchr)
*(.text.sock_common_getsockopt)
*(.text.skb_checksum)
*(.text.remove_wait_queue)
*(.text.rb_replace_node)
*(.text.radix_tree_node_ctor)
*(.text.pty_chars_in_buffer)
*(.text.profile_hit)
*(.text.prio_tree_left)
*(.text.pgd_clear_bad)
*(.text.pfifo_fast_dequeue)
*(.text.page_referenced)
*(.text.open_exec)
*(.text.mmput)
*(.text.mm_init)
*(.text.__ide_dma_off_quietly)
*(.text.ide_dma_intr)
*(.text.hrtimer_start)
*(.text.get_io_context)
*(.text.__get_free_pages)
*(.text.find_first_zero_bit)
*(.text.file_free_rcu)
*(.text.dummy_socket_sendmsg)
*(.text.do_unlinkat)
*(.text.do_arch_prctl)
*(.text.destroy_inode)
*(.text.can_vma_merge_before)
*(.text.block_sync_page)
*(.text.block_prepare_write)
*(.text.bio_init)
*(.text.arch_ptrace)
*(.text.wake_up_inode)
*(.text.wait_on_retry_sync_kiocb)
*(.text.vma_prio_tree_next)
*(.text.tcp_rcv_space_adjust)
*(.text.__tcp_ack_snd_check)
*(.text.sys_utime)
*(.text.sys_recvmsg)
*(.text.sys_mremap)
*(.text.sys_bdflush)
*(.text.sleep_on)
*(.text.set_page_dirty_lock)
*(.text.seq_path)
*(.text.schedule_timeout_interruptible)
*(.text.sched_fork)
*(.text.rt_run_flush)
*(.text.profile_munmap)
*(.text.prepare_binprm)
*(.text.__pagevec_release_nonlru)
*(.text.m_show)
*(.text.lookup_mnt)
*(.text.__lookup_mnt)
*(.text.lock_timer_base)
*(.text.is_subdir)
*(.text.invalidate_bh_lru)
*(.text.init_buffer_head)
*(.text.ifind_fast)
*(.text.ide_dma_start)
*(.text.__get_page_state)
*(.text.flock_to_posix_lock)
*(.text.__find_symbol)
*(.text.do_futex)
*(.text.do_execve)
*(.text.dirty_writeback_centisecs_handler)
*(.text.dev_watchdog)
*(.text.can_share_swap_page)
*(.text.blkdev_put)
*(.text.bio_get_nr_vecs)
*(.text.xfrm_compile_policy)
*(.text.vma_prio_tree_insert)
*(.text.vfs_lstat_fd)
*(.text.__user_path_lookup_open)
*(.text.thread_return)
*(.text.tcp_send_delayed_ack)
*(.text.sock_def_error_report)
*(.text.shrink_slab)
*(.text.serial_out)
*(.text.seq_read)
*(.text.secure_ip_id)
*(.text.search_binary_handler)
*(.text.proc_pid_unhash)
*(.text.pagevec_lookup)
*(.text.new_inode)
*(.text.memcpy_toiovec)
*(.text.locks_free_lock)
*(.text.__lock_page)
*(.text.__lock_buffer)
*(.text.load_module)
*(.text.is_bad_inode)
*(.text.invalidate_inode_buffers)
*(.text.insert_vm_struct)
*(.text.inode_setattr)
*(.text.inode_add_bytes)
*(.text.ide_read_24)
*(.text.ide_get_error_location)
*(.text.ide_do_drive_cmd)
*(.text.get_locked_pte)
*(.text.get_filesystem_list)
*(.text.generic_file_open)
*(.text.follow_down)
*(.text.find_next_bit)
*(.text.__find_first_bit)
*(.text.exit_mm)
*(.text.exec_keys)
*(.text.end_buffer_write_sync)
*(.text.end_bio_bh_io_sync)
*(.text.dummy_socket_shutdown)
*(.text.d_rehash)
*(.text.d_path)
*(.text.do_ioctl)
*(.text.dget_locked)
*(.text.copy_thread_group_keys)
*(.text.cdrom_end_request)
*(.text.cap_bprm_apply_creds)
*(.text.blk_rq_bio_prep)
*(.text.__bitmap_intersects)
*(.text.bio_phys_segments)
*(.text.bio_free)
*(.text.arch_get_unmapped_area_topdown)
*(.text.writeback_in_progress)
*(.text.vfs_follow_link)
*(.text.tcp_rcv_state_process)
*(.text.tcp_check_space)
*(.text.sys_stat)
*(.text.sys_rt_sigreturn)
*(.text.sys_rt_sigaction)
*(.text.sys_remap_file_pages)
*(.text.sys_pwrite64)
*(.text.sys_fchownat)
*(.text.sys_fchmodat)
*(.text.strncat)
*(.text.strlcat)
*(.text.strcmp)
*(.text.steal_locks)
*(.text.sock_create)
*(.text.sk_stream_rfree)
*(.text.sk_stream_mem_schedule)
*(.text.skip_atoi)
*(.text.sk_alloc)
*(.text.show_stat)
*(.text.set_fs_pwd)
*(.text.set_binfmt)
*(.text.pty_unthrottle)
*(.text.proc_symlink)
*(.text.pipe_release)
*(.text.pageout)
*(.text.n_tty_write_wakeup)
*(.text.n_tty_ioctl)
*(.text.nr_free_zone_pages)
*(.text.migration_thread)
*(.text.mempool_free_slab)
*(.text.meminfo_read_proc)
*(.text.max_sane_readahead)
*(.text.lru_cache_add)
*(.text.kill_fasync)
*(.text.kernel_read)
*(.text.invalidate_mapping_pages)
*(.text.inode_has_buffers)
*(.text.init_once)
*(.text.inet_sendmsg)
*(.text.idedisk_issue_flush)
*(.text.generic_file_write)
*(.text.free_more_memory)
*(.text.__free_fdtable)
*(.text.filp_dtor)
*(.text.exit_sem)
*(.text.exit_itimers)
*(.text.error_interrupt)
*(.text.end_buffer_async_write)
*(.text.eligible_child)
*(.text.elf_map)
*(.text.dump_task_regs)
*(.text.dummy_task_setscheduler)
*(.text.dummy_socket_accept)
*(.text.dummy_file_free_security)
*(.text.__down_read)
*(.text.do_sock_read)
*(.text.do_sigaltstack)
*(.text.do_mremap)
*(.text.current_io_context)
*(.text.cpu_swap_callback)
*(.text.copy_vma)
*(.text.cap_bprm_set_security)
*(.text.blk_insert_request)
*(.text.bio_map_kern_endio)
*(.text.bio_hw_segments)
*(.text.bictcp_cong_avoid)
*(.text.add_interrupt_randomness)
*(.text.wait_for_completion)
*(.text.version_read_proc)
*(.text.unix_write_space)
*(.text.tty_ldisc_ref_wait)
*(.text.tty_ldisc_put)
*(.text.try_to_wake_up)
*(.text.tcp_v4_tw_remember_stamp)
*(.text.tcp_try_undo_dsack)
*(.text.tcp_may_send_now)
*(.text.sys_waitid)
*(.text.sys_sched_getparam)
*(.text.sys_getppid)
*(.text.sys_getcwd)
*(.text.sys_dup2)
*(.text.sys_chmod)
*(.text.sys_chdir)
*(.text.sprintf)
*(.text.sock_wfree)
*(.text.sock_aio_write)
*(.text.skb_drop_fraglist)
*(.text.skb_dequeue)
*(.text.set_close_on_exec)
*(.text.set_brk)
*(.text.seq_puts)
*(.text.SELECT_DRIVE)
*(.text.sched_exec)
*(.text.return_EIO)
*(.text.remove_from_page_cache)
*(.text.rcu_start_batch)
*(.text.__put_task_struct)
*(.text.proc_pid_readdir)
*(.text.proc_get_inode)
*(.text.prepare_to_wait_exclusive)
*(.text.pipe_wait)
*(.text.pipe_new)
*(.text.pdflush_operation)
*(.text.__pagevec_release)
*(.text.pagevec_lookup_tag)
*(.text.packet_rcv)
*(.text.n_tty_set_room)
*(.text.nr_free_pages)
*(.text.__net_timestamp)
*(.text.mpage_end_io_read)
*(.text.mod_timer)
*(.text.__memcpy)
*(.text.mb_cache_shrink_fn)
*(.text.lock_rename)
*(.text.kstrdup)
*(.text.is_ignored)
*(.text.int_very_careful)
*(.text.inotify_inode_is_dead)
*(.text.inotify_get_cookie)
*(.text.inode_get_bytes)
*(.text.init_timer)
*(.text.init_dev)
*(.text.inet_getname)
*(.text.ide_map_sg)
*(.text.__ide_dma_end)
*(.text.hrtimer_get_remaining)
*(.text.get_task_mm)
*(.text.get_random_int)
*(.text.free_pipe_info)
*(.text.filemap_write_and_wait_range)
*(.text.exit_thread)
*(.text.enter_idle)
*(.text.end_that_request_first)
*(.text.end_8259A_irq)
*(.text.dummy_file_alloc_security)
*(.text.do_group_exit)
*(.text.debug_mutex_init)
*(.text.cpuset_exit)
*(.text.cpu_idle)
*(.text.copy_semundo)
*(.text.copy_files)
*(.text.chrdev_open)
*(.text.cdrom_transfer_packet_command)
*(.text.cdrom_mode_sense)
*(.text.blk_phys_contig_segment)
*(.text.blk_get_queue)
*(.text.bio_split)
*(.text.audit_alloc)
*(.text.anon_pipe_buf_release)
*(.text.add_wait_queue_exclusive)
*(.text.add_wait_queue)
*(.text.acct_process)
*(.text.account)
*(.text.zeromap_page_range)
*(.text.yield)
*(.text.writeback_acquire)
*(.text.worker_thread)
*(.text.wait_on_page_writeback_range)
*(.text.__wait_on_buffer)
*(.text.vscnprintf)
*(.text.vmalloc_to_pfn)
*(.text.vgacon_save_screen)
*(.text.vfs_unlink)
*(.text.vfs_rmdir)
*(.text.unregister_md_personality)
*(.text.unlock_new_inode)
*(.text.unix_stream_sendmsg)
*(.text.unix_stream_recvmsg)
*(.text.unhash_process)
*(.text.udp_v4_lookup_longway)
*(.text.tty_ldisc_flush)
*(.text.tty_ldisc_enable)
*(.text.tty_hung_up_p)
*(.text.tty_buffer_free_all)
*(.text.tso_fragment)
*(.text.try_to_del_timer_sync)
*(.text.tcp_v4_err)
*(.text.tcp_unhash)
*(.text.tcp_seq_next)
*(.text.tcp_select_initial_window)
*(.text.tcp_sacktag_write_queue)
*(.text.tcp_cwnd_validate)
*(.text.sys_vhangup)
*(.text.sys_uselib)
*(.text.sys_symlink)
*(.text.sys_signal)
*(.text.sys_poll)
*(.text.sys_mount)
*(.text.sys_kill)
*(.text.sys_ioctl)
*(.text.sys_inotify_add_watch)
*(.text.sys_getuid)
*(.text.sys_getrlimit)
*(.text.sys_getitimer)
*(.text.sys_getgroups)
*(.text.sys_ftruncate)
*(.text.sysfs_lookup)
*(.text.sys_exit_group)
*(.text.stub_fork)
*(.text.sscanf)
*(.text.sock_map_fd)
*(.text.sock_get_timestamp)
*(.text.__sock_create)
*(.text.smp_call_function_single)
*(.text.sk_stop_timer)
*(.text.skb_copy_and_csum_datagram)
*(.text.__skb_checksum_complete)
*(.text.single_next)
*(.text.sigqueue_alloc)
*(.text.shrink_dcache_parent)
*(.text.select_idle_routine)
*(.text.run_workqueue)
*(.text.run_local_timers)
*(.text.remove_inode_hash)
*(.text.remove_dquot_ref)
*(.text.register_binfmt)
*(.text.read_cache_pages)
*(.text.rb_last)
*(.text.pty_open)
*(.text.proc_root_readdir)
*(.text.proc_pid_flush)
*(.text.proc_pident_lookup)
*(.text.proc_fill_super)
*(.text.proc_exe_link)
*(.text.posix_locks_deadlock)
*(.text.pipe_iov_copy_from_user)
*(.text.opost)
*(.text.nf_register_hook)
*(.text.netif_rx_ni)
*(.text.m_start)
*(.text.mpage_writepage)
*(.text.mm_alloc)
*(.text.memory_open)
*(.text.mark_buffer_async_write)
*(.text.lru_add_drain_all)
*(.text.locks_init_lock)
*(.text.locks_delete_lock)
*(.text.lock_hrtimer_base)
*(.text.load_script)
*(.text.__kill_fasync)
*(.text.ip_mc_sf_allow)
*(.text.__ioremap)
*(.text.int_with_check)
*(.text.int_sqrt)
*(.text.install_thread_keyring)
*(.text.init_page_buffers)
*(.text.inet_sock_destruct)
*(.text.idle_notifier_register)
*(.text.ide_execute_command)
*(.text.ide_end_drive_cmd)
*(.text.__ide_dma_host_on)
*(.text.hrtimer_run_queues)
*(.text.hpet_mask_rtc_irq_bit)
*(.text.__get_zone_counts)
*(.text.get_zone_counts)
*(.text.get_write_access)
*(.text.get_fs_struct)
*(.text.get_dirty_limits)
*(.text.generic_readlink)
*(.text.free_hot_page)
*(.text.finish_wait)
*(.text.find_inode)
*(.text.find_first_bit)
*(.text.__filemap_fdatawrite_range)
*(.text.__filemap_copy_from_user_iovec)
*(.text.exit_aio)
*(.text.elv_set_request)
*(.text.elv_former_request)
*(.text.dup_namespace)
*(.text.dupfd)
*(.text.dummy_socket_getsockopt)
*(.text.dummy_sb_post_mountroot)
*(.text.dummy_quotactl)
*(.text.dummy_inode_rename)
*(.text.__do_SAK)
*(.text.do_pipe)
*(.text.do_fsync)
*(.text.d_instantiate_unique)
*(.text.d_find_alias)
*(.text.deny_write_access)
*(.text.dentry_unhash)
*(.text.d_delete)
*(.text.datagram_poll)
*(.text.cpuset_fork)
*(.text.cpuid_read)
*(.text.copy_namespace)
*(.text.cond_resched)
*(.text.check_version)
*(.text.__change_page_attr)
*(.text.cfq_slab_kill)
*(.text.cfq_completed_request)
*(.text.cdrom_pc_intr)
*(.text.cdrom_decode_status)
*(.text.cap_capset_check)
*(.text.blk_put_request)
*(.text.bio_fs_destructor)
*(.text.bictcp_min_cwnd)
*(.text.alloc_chrdev_region)
*(.text.add_element)
*(.text.acct_update_integrals)
*(.text.write_boundary_block)
*(.text.writeback_release)
*(.text.writeback_inodes)
*(.text.wake_up_state)
*(.text.__wake_up_locked)
*(.text.wake_futex)
*(.text.wait_task_inactive)
*(.text.__wait_on_freeing_inode)
*(.text.wait_noreap_copyout)
*(.text.vmstat_start)
*(.text.vgacon_do_font_op)
*(.text.vfs_readv)
*(.text.vfs_quota_sync)
*(.text.update_queue)
*(.text.unshare_files)
*(.text.unmap_vm_area)
*(.text.unix_socketpair)
*(.text.unix_release_sock)
*(.text.unix_detach_fds)
*(.text.unix_create1)
*(.text.unix_bind)
*(.text.udp_sendmsg)
*(.text.udp_rcv)
*(.text.udp_queue_rcv_skb)
*(.text.uart_write)
*(.text.uart_startup)
*(.text.uart_open)
*(.text.tty_vhangup)
*(.text.tty_termios_baud_rate)
*(.text.tty_release)
*(.text.tty_ldisc_ref)
*(.text.throttle_vm_writeout)
*(.text.058)
*(.text.tcp_xmit_probe_skb)
*(.text.tcp_v4_send_check)
*(.text.tcp_v4_destroy_sock)
*(.text.tcp_sync_mss)
*(.text.tcp_snd_test)
*(.text.tcp_slow_start)
*(.text.tcp_send_fin)
*(.text.tcp_rtt_estimator)
*(.text.tcp_parse_options)
*(.text.tcp_ioctl)
*(.text.tcp_init_tso_segs)
*(.text.tcp_init_cwnd)
*(.text.tcp_getsockopt)
*(.text.tcp_fin)
*(.text.tcp_connect)
*(.text.tcp_cong_avoid)
*(.text.__tcp_checksum_complete_user)
*(.text.task_dumpable)
*(.text.sys_wait4)
*(.text.sys_utimes)
*(.text.sys_symlinkat)
*(.text.sys_socketpair)
*(.text.sys_rmdir)
*(.text.sys_readahead)
*(.text.sys_nanosleep)
*(.text.sys_linkat)
*(.text.sys_fstat)
*(.text.sysfs_readdir)
*(.text.sys_execve)
*(.text.sysenter_tracesys)
*(.text.sys_chown)
*(.text.stub_clone)
*(.text.strrchr)
*(.text.strncpy)
*(.text.stopmachine_set_state)
*(.text.sock_sendmsg)
*(.text.sock_release)
*(.text.sock_fasync)
*(.text.sock_close)
*(.text.sk_stream_write_space)
*(.text.sk_reset_timer)
*(.text.skb_split)
*(.text.skb_recv_datagram)
*(.text.skb_queue_tail)
*(.text.sk_attach_filter)
*(.text.si_swapinfo)
*(.text.simple_strtoll)
*(.text.set_termios)
*(.text.set_task_comm)
*(.text.set_shrinker)
*(.text.set_normalized_timespec)
*(.text.set_brk)
*(.text.serial_in)
*(.text.seq_printf)
*(.text.secure_dccp_sequence_number)
*(.text.rwlock_bug)
*(.text.rt_hash_code)
*(.text.__rta_fill)
*(.text.__request_resource)
*(.text.relocate_new_kernel)
*(.text.release_thread)
*(.text.release_mem)
*(.text.rb_prev)
*(.text.rb_first)
*(.text.random_poll)
*(.text.__put_super_and_need_restart)
*(.text.pty_write)
*(.text.ptrace_stop)
*(.text.proc_self_readlink)
*(.text.proc_root_lookup)
*(.text.proc_root_link)
*(.text.proc_pid_make_inode)
*(.text.proc_pid_attr_write)
*(.text.proc_lookupfd)
*(.text.proc_delete_inode)
*(.text.posix_same_owner)
*(.text.posix_block_lock)
*(.text.poll_initwait)
*(.text.pipe_write)
*(.text.pipe_read_fasync)
*(.text.pipe_ioctl)
*(.text.pdflush)
*(.text.pci_user_read_config_dword)
*(.text.page_readlink)
*(.text.null_lseek)
*(.text.nf_hook_slow)
*(.text.netlink_sock_destruct)
*(.text.netlink_broadcast)
*(.text.neigh_resolve_output)
*(.text.name_to_int)
*(.text.mwait_idle)
*(.text.mutex_trylock)
*(.text.mutex_debug_check_no_locks_held)
*(.text.m_stop)
*(.text.mpage_end_io_write)
*(.text.mpage_alloc)
*(.text.move_page_tables)
*(.text.mounts_open)
*(.text.__memset)
*(.text.memcpy_fromiovec)
*(.text.make_8259A_irq)
*(.text.lookup_user_key_possessed)
*(.text.lookup_create)
*(.text.locks_insert_lock)
*(.text.locks_alloc_lock)
*(.text.kthread_should_stop)
*(.text.kswapd)
*(.text.kobject_uevent)
*(.text.kobject_get_path)
*(.text.kobject_get)
*(.text.klist_children_put)
*(.text.__ip_route_output_key)
*(.text.ip_flush_pending_frames)
*(.text.ip_compute_csum)
*(.text.ip_append_data)
*(.text.ioc_set_batching)
*(.text.invalidate_inode_pages)
*(.text.__invalidate_device)
*(.text.install_arg_page)
*(.text.in_sched_functions)
*(.text.inotify_unmount_inodes)
*(.text.init_once)
*(.text.init_cdrom_command)
*(.text.inet_stream_connect)
*(.text.inet_sk_rebuild_header)
*(.text.inet_csk_addr2sockaddr)
*(.text.inet_create)
*(.text.ifind)
*(.text.ide_setup_dma)
*(.text.ide_outsw)
*(.text.ide_fixstring)
*(.text.ide_dma_setup)
*(.text.ide_cdrom_packet)
*(.text.ide_cd_put)
*(.text.ide_build_sglist)
*(.text.i8259A_shutdown)
*(.text.hung_up_tty_ioctl)
*(.text.hrtimer_nanosleep)
*(.text.hrtimer_init)
*(.text.hrtimer_cancel)
*(.text.hash_futex)
*(.text.group_send_sig_info)
*(.text.grab_cache_page_nowait)
*(.text.get_wchan)
*(.text.get_stack)
*(.text.get_page_state)
*(.text.getnstimeofday)
*(.text.get_node)
*(.text.get_kprobe)
*(.text.generic_unplug_device)
*(.text.free_task)
*(.text.frag_show)
*(.text.find_next_zero_string)
*(.text.filp_open)
*(.text.fillonedir)
*(.text.exit_io_context)
*(.text.exit_idle)
*(.text.exact_lock)
*(.text.eth_header)
*(.text.dummy_unregister_security)
*(.text.dummy_socket_post_create)
*(.text.dummy_socket_listen)
*(.text.dummy_quota_on)
*(.text.dummy_inode_follow_link)
*(.text.dummy_file_receive)
*(.text.dummy_file_mprotect)
*(.text.dummy_file_lock)
*(.text.dummy_file_ioctl)
*(.text.dummy_bprm_post_apply_creds)
*(.text.do_writepages)
*(.text.__down_interruptible)
*(.text.do_notify_resume)
*(.text.do_acct_process)
*(.text.del_timer_sync)
*(.text.default_rebuild_header)
*(.text.d_callback)
*(.text.dcache_readdir)
*(.text.ctrl_dumpfamily)
*(.text.cpuset_rmdir)
*(.text.copy_strings_kernel)
*(.text.con_write_room)
*(.text.complete_all)
*(.text.collect_sigign_sigcatch)
*(.text.clear_user)
*(.text.check_unthrottle)
*(.text.cdrom_release)
*(.text.cdrom_newpc_intr)
*(.text.cdrom_ioctl)
*(.text.cdrom_check_status)
*(.text.cdev_put)
*(.text.cdev_add)
*(.text.cap_ptrace)
*(.text.cap_bprm_secureexec)
*(.text.cache_alloc_refill)
*(.text.bmap)
*(.text.blk_run_queue)
*(.text.blk_queue_dma_alignment)
*(.text.blk_ordered_req_seq)
*(.text.blk_backing_dev_unplug)
*(.text.__bitmap_subset)
*(.text.__bitmap_and)
*(.text.bio_unmap_user)
*(.text.__bforget)
*(.text.bd_forget)
*(.text.bad_pipe_w)
*(.text.bad_get_user)
*(.text.audit_free)
*(.text.anon_vma_ctor)
*(.text.anon_pipe_buf_map)
*(.text.alloc_sock_iocb)
*(.text.alloc_fdset)
*(.text.aio_kick_handler)
*(.text.__add_entropy_words)
*(.text.add_disk_randomness)
...@@ -20,7 +20,12 @@ SECTIONS ...@@ -20,7 +20,12 @@ SECTIONS
phys_startup_64 = startup_64 - LOAD_OFFSET; phys_startup_64 = startup_64 - LOAD_OFFSET;
_text = .; /* Text and read-only data */ _text = .; /* Text and read-only data */
.text : AT(ADDR(.text) - LOAD_OFFSET) { .text : AT(ADDR(.text) - LOAD_OFFSET) {
/* First the code that has to be first for bootstrapping */
*(.bootstrap.text) *(.bootstrap.text)
/* Then all the functions that are "hot" in profiles, to group them
onto the same hugetlb entry */
#include "functionlist"
/* Then the rest */
*(.text) *(.text)
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
......
#!/usr/bin/perl
#
# Takes a (sorted) output of readprofile and turns it into a list suitable for
# linker scripts
#
# usage:
# readprofile | sort -rn | perl profile2linkerlist.pl > functionlist
#
while (<>) {
my $line = $_;
$_ =~ /\W*[0-9]+\W*([a-zA-Z\_0-9]+)\W*[0-9]+/;
if ( ($line =~ /unknown/) || ($line =~ /total/)) {
} else {
print "*(.text.$1)\n";
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment