(gdb) list 1056 } 1057 return NULL; 1058 } 1059 1060 static struct rule *di_jump(struct rule *rule){ 1061 struct cache_header *header = (struct cache_header*) RULES_PTR(0); 1062 size_t offset = (char *)rule - (char*)rules_ptr; 1063 size_t next = rule->jump_position; 1064 1065 if (next == 0) return NULL; (gdb) 1066 if (((offset >= header->fdi_rules_preprobe) && (next < header->fdi_rules_information)) || 1067 ((offset >= header->fdi_rules_information) && (next < header->fdi_rules_policy)) || 1068 ((offset >= header->fdi_rules_policy) && (next < header->all_rules_size))){ 1069 return (struct rule*) RULES_PTR(next); 1070 } 1071 return NULL; 1072 } 1073 1074 1075 /* process a match and merge comand for a device */ (gdb) bt #0 di_jump (rule=0x400005f4018) at device_info.c:1061 #1 0x0000000010016ab0 in rules_match_and_merge_device (fdi_rules_list=0x400005f4018, d=0x100e6500) at device_info.c:1089 #2 0x0000000010016ce0 in di_search_and_merge (d=0x100e6500, type=DEVICE_INFO_TYPE_POLICY) at device_info.c:1164 #3 0x0000000010040fec in add_dev_after_probing (d=0x100e6500, handler=0x10076ca0, end_token=0x100e3c50) at device.c:4316 #4 0x000000001004137c in dev_callouts_preprobing_done (d=0x100e6500, userdata1=0x100e3c50, userdata2=0x10076ca0) at device.c:4405 #5 0x000000001000a9b4 in hal_util_callout_device_preprobe (d=0x100e6500, callback=@0x1007aef8: 0x100411ec , userdata1=0x100e3c50, userdata2=0x10076ca0) at util.c:1014 #6 0x0000000010041614 in hotplug_event_begin_add_dev (subsystem=0x100e3c60 "pci", sysfs_path=0x100e3d60 "/sys/devices/pci0000:f0/0000:f0:0b.0", device_file=0x100e4160 "", parent_dev=0x0, parent_path=0x0, end_token=0x100e3c50) at device.c:4468 #7 0x0000000010032770 in hotplug_event_begin_sysfs (hotplug_event=0x100e3c50) at hotplug.c:172 #8 0x0000000010032ce8 in hotplug_event_begin (hotplug_event=0x100e3c50) at hotplug.c:295 #9 0x0000000010033318 in hotplug_event_process_queue () at hotplug.c:435 #10 0x0000000010035338 in process_coldplug_events () at coldplug.c:540 #11 0x00000000100355a0 in coldplug_synthesize_events () at coldplug.c:583 #12 0x0000000010030c8c in computer_probing_helper_done (d=0x100bce80) at osspec.c:483 #13 0x0000000010031194 in computer_probing_pcbios_helper_done (d=0x100bce80, exit_type=0, return_code=1, error=0x100bba00, data1=0x0, data2=0x0) at osspec.c:619 #14 0x000000001000dec4 in process_reply (m=0x10090ee0, hb=0x10090bc0) at hald_runner.c:729 #15 0x000000001000e098 in call_notify (pending=0x10091000, user_data=0x10090bc0) at hald_runner.c:772 #16 0x0000040000246664 in .dbus_pending_call_get_data () from /usr/lib/libdbus-1.so.3 #17 0x0000040000232e7c in .dbus_connection_set_watch_functions () from /usr/lib/libdbus-1.so.3 #18 0x0000040000233f44 in .dbus_connection_dispatch () from /usr/lib/libdbus-1.so.3 #19 0x000004000004ad98 in .dbus_server_setup_with_g_main () from /usr/lib/libdbus-glib-1.so.2 #20 0x0000040000148370 in .g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #21 0x000004000014d288 in .g_main_context_prepare () from /usr/lib/libglib-2.0.so.0 #22 0x000004000014dae4 in .g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #23 0x000000001001a94c in main (argc=3, argv=0xfffff9b2758) at hald.c:809 (gdb) print *rule $2 = {rule_size = 104, jump_position = 0, rtype = RULE_MATCH, type_match = MATCH_STRING, type_merge = MERGE_UNKNOWN, value_offset = 84, value_len = 38, key_len = 9, key = 0x400005f4048 "info.udi"} (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000010016a18 in rules_match_and_merge_device at device_info.c:1079 breakpoint already hit 1 time 2 breakpoint keep y 0x00000000100168c8 in di_jump at device_info.c:1061 breakpoint already hit 1 time