77
77
#
78
78
# - The second item is a boolean indicating whether it is permissible for
79
79
# the object to be located in user-accessible memory.
80
+ #
81
+ # - The third items is a boolean indicating whether this item can be
82
+ # dynamically allocated with k_object_alloc()
80
83
81
84
# Regular dictionaries are ordered only with Python 3.6 and
82
85
# above. Good summary and pointers to official documents at:
83
86
# https://stackoverflow.com/questions/39980323/are-dictionaries-ordered-in-python-3-6
84
87
kobjects = OrderedDict ([
85
- ("k_mem_slab" , (None , False )),
86
- ("k_msgq" , (None , False )),
87
- ("k_mutex" , (None , False )),
88
- ("k_pipe" , (None , False )),
89
- ("k_queue" , (None , False )),
90
- ("k_poll_signal" , (None , False )),
91
- ("k_sem" , (None , False )),
92
- ("k_stack" , (None , False )),
93
- ("k_thread" , (None , False )),
94
- ("k_timer" , (None , False )),
95
- ("z_thread_stack_element" , (None , False )),
96
- ("device" , (None , False )),
97
- ("sys_mutex" , (None , True )),
98
- ("k_futex" , (None , True ))
88
+ ("k_mem_slab" , (None , False , True )),
89
+ ("k_msgq" , (None , False , True )),
90
+ ("k_mutex" , (None , False , True )),
91
+ ("k_pipe" , (None , False , True )),
92
+ ("k_queue" , (None , False , True )),
93
+ ("k_poll_signal" , (None , False , True )),
94
+ ("k_sem" , (None , False , True )),
95
+ ("k_stack" , (None , False , True )),
96
+ ("k_thread" , (None , False , True )), # But see #
97
+ ("k_timer" , (None , False , True )),
98
+ ("z_thread_stack_element" , (None , False , False )),
99
+ ("device" , (None , False , False )),
100
+ ("sys_mutex" , (None , True , False )),
101
+ ("k_futex" , (None , True , False ))
99
102
])
100
103
101
104
def kobject_to_enum (kobj ):
@@ -609,7 +612,7 @@ def find_kobjects(elf, syms):
609
612
if ko .type_obj .api :
610
613
continue
611
614
612
- _ , user_ram_allowed = kobjects [ko .type_obj .name ]
615
+ _ , user_ram_allowed , _ = kobjects [ko .type_obj .name ]
613
616
if not user_ram_allowed and app_smem_start <= addr < app_smem_end :
614
617
debug ("object '%s' found in invalid location %s"
615
618
% (ko .type_obj .name , hex (addr )))
@@ -853,7 +856,7 @@ def write_validation_output(fp):
853
856
def write_kobj_types_output (fp ):
854
857
fp .write ("/* Core kernel objects */\n " )
855
858
for kobj , obj_info in kobjects .items ():
856
- dep , _ = obj_info
859
+ dep , _ , _ = obj_info
857
860
if kobj == "device" :
858
861
continue
859
862
@@ -874,7 +877,7 @@ def write_kobj_types_output(fp):
874
877
def write_kobj_otype_output (fp ):
875
878
fp .write ("/* Core kernel objects */\n " )
876
879
for kobj , obj_info in kobjects .items ():
877
- dep , _ = obj_info
880
+ dep , _ , _ = obj_info
878
881
if kobj == "device" :
879
882
continue
880
883
@@ -898,10 +901,9 @@ def write_kobj_otype_output(fp):
898
901
def write_kobj_size_output (fp ):
899
902
fp .write ("/* Non device/stack objects */\n " )
900
903
for kobj , obj_info in kobjects .items ():
901
- dep , _ = obj_info
902
- # device handled by default case. Stacks are not currently handled,
903
- # if they eventually are it will be a special case.
904
- if kobj in {"device" , STACK_TYPE }:
904
+ dep , _ , alloc = obj_info
905
+
906
+ if not alloc :
905
907
continue
906
908
907
909
if dep :
0 commit comments