58 lines
1.9 KiB
Makefile
58 lines
1.9 KiB
Makefile
GEN_KOBJ_LIST := $(srctree)/scripts/gen_kobject_list.py
|
|
PROCESS_GPERF := $(srctree)/scripts/process_gperf.py
|
|
OBJ_LIST := kobject_hash.gperf
|
|
OUTPUT_SRC_PRE := kobject_hash_preprocessed.c
|
|
OUTPUT_SRC := kobject_hash.c
|
|
OUTPUT_OBJ := kobject_hash.o
|
|
OUTPUT_OBJ_RENAMED := kobject_hash_renamed.o
|
|
|
|
SCRIPT_EXTRA_ARGS :=
|
|
|
|
ifeq ($(KBUILD_VERBOSE),1)
|
|
SCRIPT_EXTRA_ARGS += --verbose
|
|
endif
|
|
|
|
# Scan the kernel binary's DWARF information to produce a table of
|
|
# kernel objects which we will pass to gperf
|
|
quiet_cmd_gen_kobj_list = KOBJ $@
|
|
cmd_gen_kobj_list = $(GEN_KOBJ_LIST) --kernel $< --output $@ \
|
|
$(SCRIPT_EXTRA_ARGS)
|
|
|
|
$(OBJ_LIST): $(PREBUILT_KERNEL) $(GEN_KOBJ_LIST)
|
|
$(call cmd,gen_kobj_list)
|
|
|
|
# Generate C code which implements a perfect hashtable based on our
|
|
# table of kernel objects
|
|
quiet_cmd_gperf = GPERF $@
|
|
cmd_gperf = gperf --output-file=$@ $<
|
|
|
|
$(OUTPUT_SRC_PRE): $(OBJ_LIST)
|
|
$(call cmd,gperf)
|
|
|
|
# For our purposes, the code/data generated by gperf is not optimal.
|
|
# This script adjusts the generated .c file to greatly reduce the amount
|
|
# of code/data generated since we know we are always working with
|
|
# pointer values
|
|
quiet_cmd_process_gperf = PROCESS $@
|
|
cmd_process_gperf = $(PROCESS_GPERF) -i $< -o $@ $(SCRIPT_EXTRA_ARGS)
|
|
|
|
$(OUTPUT_SRC): $(OUTPUT_SRC_PRE) $(PROCESS_GPERF)
|
|
$(call cmd,process_gperf)
|
|
|
|
# We need precise control of where generated text/data ends up in the final
|
|
# kernel image. Disable function/data sections and use objcopy to move
|
|
# generated data into special section names
|
|
$(OUTPUT_OBJ): KBUILD_CFLAGS += -fno-function-sections -fno-data-sections
|
|
|
|
quiet_cmd_kobject_objcopy = OBJCOPY $@
|
|
cmd_kobject_objcopy = $(OBJCOPY) \
|
|
--rename-section .data=.kobject_data.data \
|
|
--rename-section .rodata=.kobject_data.rodata \
|
|
--rename-section .text=.kobject_data.text \
|
|
$< $@
|
|
|
|
$(OUTPUT_OBJ_RENAMED): $(OUTPUT_OBJ)
|
|
$(call cmd,kobject_objcopy)
|
|
|
|
GENERATED_KERNEL_OBJECT_FILES += $(OUTPUT_OBJ_RENAMED)
|