lkml.org 
[lkml]   [2004]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subjectfinding unused globals in the kernel
Date
I've been looking for a way to find symbols in the kernel that
are not referenced anywhere and could be removed. This script is
what I came up with, it's rather slow and complicated, but I have
managed to find quite a bit of dead code with it.

It will also write a message for symbols that are both defined
static and global in some places, that information is available
for free here.

Going through the output might be a long-term task for the
janitors.

As an example, I'm including the output of the script for the
current i386 defconfig.

Arnd <><

===== Makefile 1.458 vs edited =====
--- 1.458/Makefile Wed Feb 18 04:52:33 2004
+++ edited/Makefile Sat Feb 28 20:24:43 2004
@@ -945,6 +945,9 @@
-name '*.[hcS]' -type f -print | sort \
| xargs $(PERL) -w scripts/checkversion.pl

+unusedcheck: $(vmlinux-objs)
+ bash $(srctree)/scripts/checkunused.sh $(ARCH) $(vmlinux-objs)
+
endif #ifeq ($(config-targets),1)
endif #ifeq ($(mixed-targets),1)

--- /dev/null 2003-09-20 22:40:53.000000000 +0200
+++ ./scripts/checkunused.sh 2004-02-28 20:36:09.000000000 +0100
@@ -0,0 +1,44 @@
+#!/bin/bash
+RELOC=R_`echo $1 | tr a-z A-Z | sed -e 's/I386/386/' -e 's/S390X\?/390/'`
+shift
+objdump -Dr "$@" |
+grep '\([0-9a-f].*>:$\|'"$RELOC"'[^.]*$\|^.*<[_a-zA-Z0-9+]*>$\)' |
+sed -e 's/.*: [A-Z_0-9]*.\([a-zA-Z0-9_]*\).*$/ref \1/g' \
+ -e 's/^.*<\(.*\)>:/def \1/g' \
+ -e 's/.*<\([^-+]*\>\).*$/ref \1/g' | (
+ while read a b ; do
+ if [ "$a" = def ] ; then
+ f=$b
+ else
+ if [ "$f" != "$b" ] ; then
+ echo $b $a
+ fi
+ fi
+ done
+ nm "$@" | grep '\<[UAWRTDBwrtdba]\>' |
+ sed -e 's/^.* [wrtdba] \(.*\)$/\1 local/g' \
+ -e 's/^.* . \(.*\)$/\1 def/g'
+) |
+sort | uniq | grep -v '\.' |
+while read a b ; do
+ if [ $b = ref ] ; then
+ if [ "$a" != "$sym" ] ; then
+ echo undefined reference $a
+ if [ "$sym" -a "$scope" = "def" ] ; then
+ echo unreferenced definition X $sym
+ fi
+ fi
+ sym=
+ else
+ if [ "$sym" -a "$scope" = "def" ] ; then
+ if [ "$sym" = "$a" ] ; then
+ echo defined static and global $sym
+ else
+ echo unreferenced definition $sym
+ fi
+ fi
+
+ sym=$a
+ scope=$b
+ fi
+done
bash /home/arnd/linux-2.6-ipc/scripts/checkunused.sh i386 arch/i386/kernel/head.o arch/i386/kernel/init_task.o init/built-in.o usr/built-in.o arch/i386/kernel/built-in.o arch/i386/mm/built-in.o arch/i386/mach-default/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o lib/lib.a arch/i386/lib/lib.a lib/built-in.o arch/i386/lib/built-in.o drivers/built-in.o sound/built-in.o arch/i386/pci/built-in.o arch/i386/oprofile/built-in.o arch/i386/power/built-in.o net/built-in.o
unreferenced definition VSYSCALL_BASE
unreferenced definition Version_132611
unreferenced definition __journal_internal_check
unreferenced definition __pmd_alloc
unreferenced definition __send_IPI_shortcut
unreferenced definition _fh_update
unreferenced definition _fh_update_old
unreferenced definition acpi_clear_gpe
unreferenced definition acpi_detach_data
defined static and global acpi_disable
unreferenced definition acpi_ds_method_data_get_type
unreferenced definition acpi_ds_obj_stack_delete_all
unreferenced definition acpi_ds_obj_stack_get_value
unreferenced definition acpi_ds_result_insert
unreferenced definition acpi_ds_result_remove
unreferenced definition acpi_evaluate_object_typed
unreferenced definition acpi_gbl_abort_method
unreferenced definition acpi_gbl_breakpoint_walk
unreferenced definition acpi_gbl_method_executing
unreferenced definition acpi_gbl_nesting_level
unreferenced definition acpi_gbl_parsed_namespace_root
unreferenced definition acpi_gbl_pm1_enable_register_save
unreferenced definition acpi_gbl_step_to_next_call
unreferenced definition acpi_get_event_status
unreferenced definition acpi_get_firmware_waking_vector
unreferenced definition acpi_get_gpe_status
unreferenced definition acpi_get_table_header
unreferenced definition acpi_get_timer_resolution
unreferenced definition acpi_install_initialization_handler
unreferenced definition acpi_load_table
unreferenced definition acpi_ns_find_parent_name
unreferenced definition acpi_ns_unload_namespace
unreferenced definition acpi_os_get_line
unreferenced definition acpi_os_get_pci_id
unreferenced definition acpi_os_get_physical_address
unreferenced definition acpi_os_writable
unreferenced definition acpi_ps_get_child
unreferenced definition acpi_ps_get_depth_next
unreferenced definition acpi_ps_get_name
unreferenced definition acpi_ps_get_opcode_name
unreferenced definition acpi_save_state_disk
unreferenced definition acpi_subsystem_status
unreferenced definition acpi_tb_handle_to_object
unreferenced definition acpi_unload_table
unreferenced definition acpi_ut_create_pkg_state_and_push
unreferenced definition acpi_ut_dump_buffer
unreferenced definition acpi_ut_get_event_name
unreferenced definition acpi_ut_print_string
unreferenced definition acpi_ut_strupr
unreferenced definition alloc_null_binding
unreferenced definition bcopy
unreferenced definition blk_queue_resize_tags
defined static and global boot_cpu_logical_apicid
unreferenced definition boot_gdt
unreferenced definition bootmem_bootmap_pages
unreferenced definition cache_drop
unreferenced definition cache_find
defined static and global charset2uni
unreferenced definition compat_sys_futex
unreferenced definition con_protect_unimap
defined static and global debug
defined static and global dev_seq_next
defined static and global dev_seq_start
defined static and global dev_seq_stop
unreferenced definition dodgy_tsc
unreferenced definition early_serial_setup
unreferenced definition emergency_remount
unreferenced definition emergency_sync
unreferenced definition exp_pseudoroot
unreferenced definition ext2_count_free
unreferenced definition ext2_panic
unreferenced definition ext3_count_free
unreferenced definition ext3_panic
unreferenced definition free_cold_page
unreferenced definition get_fpu_twd
unreferenced definition hardpps_ptr
defined static and global helpers
unreferenced definition hid_find_field_in_report
unreferenced definition hid_find_report_by_usage
unreferenced definition highend_pfn
unreferenced definition highstart_pfn
unreferenced definition i830_alloc_pages
unreferenced definition i830_calloc
unreferenced definition i830_dma_service
unreferenced definition i830_do_cleanup_pageflip
unreferenced definition i830_driver_irq_postinstall
unreferenced definition i830_driver_irq_preinstall
unreferenced definition i830_driver_irq_uninstall
unreferenced definition i830_ioremap_nocache
unreferenced definition init_bootmem_node
unreferenced definition init_cpu_khz
unreferenced definition irq_entries_start
unreferenced definition ksize
unreferenced definition memcmp
unreferenced definition mp_bus_id_to_local
unreferenced definition mp_bus_id_to_node
unreferenced definition mtrr_centaur_report_mcr
unreferenced definition mtrr_if_name
defined static and global mtrr_state
unreferenced definition nfs_commit_release
unreferenced definition nfsd_dosync
unreferenced definition nlmsvc_decode_res
unreferenced definition node_online_map
unreferenced definition pci_assign_unassigned_resources
unreferenced definition pg1
unreferenced definition pmd_cache
unreferenced definition pmd_ctor
unreferenced definition print_all_local_APICs
unreferenced definition print_driverbyte
unreferenced definition print_hostbyte
unreferenced definition promise_rw_disk
unreferenced definition ptrace_readdata
unreferenced definition ptrace_writedata
unreferenced definition quad_local_to_mp_bus_id
unreferenced definition register_leds
unreferenced definition resize_screen
defined static and global resume_device
unreferenced definition rpc_pipe_iops
unreferenced definition rpciod_wake_up
unreferenced definition rtnetlink_send
unreferenced definition send_IPI_mask_bitmask
unreferenced definition send_IPI_mask_sequence
unreferenced definition set_fpu_cwd
unreferenced definition set_fpu_mxcsr
unreferenced definition set_fpu_swd
unreferenced definition set_fpu_twd
unreferenced definition set_pmd_pfn
unreferenced definition show_trace_task
unreferenced definition snd_ac97_suspend
unreferenced definition snd_pcm_format_cpu_endian
unreferenced definition snd_pcm_format_silence
unreferenced definition snd_pcm_format_silence_16
unreferenced definition snd_pcm_format_silence_32
unreferenced definition snd_pcm_hw_param_any
unreferenced definition snd_pcm_hw_param_setinteger
unreferenced definition snd_pcm_hw_params_any
unreferenced definition snd_pcm_plug_capture_channels_mask
unreferenced definition startup_32
unreferenced definition stext
unreferenced definition strcat
unreferenced definition strchr
unreferenced definition strcmp
unreferenced definition strncat
unreferenced definition strncmp
unreferenced definition strrchr
unreferenced definition svc_auth_register
unreferenced definition svc_auth_unregister
unreferenced definition sys_pciconfig_iobase
unreferenced definition sys_pciconfig_read
unreferenced definition sys_pciconfig_write
unreferenced definition sys_semop
unreferenced definition sysfs_mknod
unreferenced definition timer_bug_msg
unreferenced definition tr_table
unreferenced definition tty_paranoia_check
unreferenced definition tty_write_message
unreferenced definition uart_console_device
unreferenced definition udf64_high32
unreferenced definition udf64_low32
unreferenced definition udf_filead_read
unreferenced definition udf_get_fileextent
unreferenced definition unregister_cpu_notifier
unreferenced definition usb_stor_sense_notready
unreferenced definition xdr_decode_netobj_fixed
unreferenced definition xdr_kmap
unreferenced definition xdr_kunmap
unreferenced definition xdr_shift_iovec
unreferenced definition xquad_portio
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:01    [W:1.300 / U:0.372 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site