[PATCH 1/1] tools: ftdgrep: use /* fallthrough */ as needed

Tom Rini trini at konsulko.com
Wed May 13 18:13:03 CEST 2020


On Thu, May 14, 2020 at 01:05:37AM +0900, Masahiro Yamada wrote:
> Hi Tom,
> 
> On Wed, May 13, 2020 at 11:42 PM Tom Rini <trini at konsulko.com> wrote:
> >
> > On Tue, May 12, 2020 at 11:04:38PM -0400, Tom Rini wrote:
> > > On Mon, May 11, 2020 at 09:08:03PM +0200, Heinrich Schuchardt wrote:
> > > > On 5/11/20 8:40 PM, Tom Rini wrote:
> > > > > On Sun, May 10, 2020 at 10:12:07PM +0900, Masahiro Yamada wrote:
> > > > >> On Sun, May 10, 2020 at 12:12 AM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> > > > >>>
> > > > >>> GCC recognizes /* fallthrough */ if -Wimplicit-fallthrough=3 is enabled.
> > > > >>
> > > > >> FYI.
> > > > >>
> > > > >> Linux decided to not use /* fallthrough */ any more
> > > > >> because Clang does not recognize it.
> > > > >>
> > > > >> __attribute__((__fallthrough__)) is supported
> > > > >> by both Clang and recent GCC.
> > > > In fact Linux has a define:
> > > >
> > > > include/linux/compiler_attributes.h:200:# define fallthrough
> > > >         __attribute__((__fallthrough__))
> > > >
> > > > And in the code you would use
> > > >
> > > >     case foo:
> > > >             fallthrough;
> > > >     case bar:
> > > >
> > > > But the Linux kernel still has a lot of lines with
> > > >
> > > > /* fallthrough */
> > > >
> > > > Documentation/process/deprecated.rst:
> > > >
> > > > <cite>
> > > > As there have been a long list of flaws `due to missing "break"
> > > > statements <https://cwe.mitre.org/data/definitions/484.html>`_, we no
> > > > longer allow implicit fall-through. In order to identify intentional
> > > > fall-through cases, we have adopted a pseudo-keyword macro "fallthrough"
> > > > which expands to gcc's extension `__attribute__((__fallthrough__))
> > > > <https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html>`_. (When
> > > > the C17/C18  `[[fallthrough]]` syntax is more commonly supported by C
> > > > compilers, static analyzers, and IDEs, we can switch to using that
> > > > syntax for the macro pseudo-keyword.)
> > > > </cite>
> > > >
> > > > Using the attribute is not standard C and not any better than using the
> > > > comment. The real target is the C17 syntax.
> > > >
> > > > >>
> > > > >>
> > > > >> Linux is now doing treewide conversion
> > > > >> from /* fallthrough */ to 'fallthrough;'.
> > > > >>
> > > > >> See include/linux/compiler_attributes.h in Linux.
> > > > >>
> > > > >> I do not know if U-Boot wants to align with it.
> > > > >> (up to Tom ?)
> > > > >
> > > > > A re-sync on the compiler headers again and making use of this sounds
> > > > > like a good idea, yes.
> > > > >
> > > >
> > > > We should enable -Wimplicit-fallthrough like the kernel does. This
> > > > defaults to -Wimplicit-fallthrough=3 and is happy with both the comment
> > > > as well as with the attribute.
> > > >
> > > > @Tom:
> > > > Will you update the compiler headers within this release cycle?
> > > > Otherwise we should take the patch as is to get us closer to the
> > > > -Wimplicit-fallthrough target.
> > >
> > > I'm not going to update it for this release cycle.  I've done the
> > > initial import and build and there's some fairly large changes related
> > > to inlining that I want to look at harder to see if we can/should do
> > > something about (I don't want to derail this thread, I'll start
> > > another).  But it's very far from zero size change and given the inline
> > > changes I think it'll need real testing.
> > >
> > > And since the kernel isn't making a huge use yet of fallthrough; we can
> > > afford to look a little harder at things.
> >
> > I think I've figured out the inline issue which is that we need
> > scripts/Kconfig.include from the kernel, CC_HAS_ASM_INLINE Kconfig
> > option, and re-sync with Kconfiglib, but that's still going to be enough
> > stuff that I don't think it's good to pull in at -rc2.
> >
> 
> 
> I do not get how 'asm inline' support is related
> to this topic.
> 
> GCC 9 started to support 'asm inline' for the better inlining heuristic.
> The kernel uses a bunch of inline assembly
> that is not as expensive as it looks.
> 
> As GCC is agnostic about the real cost of inline assembly,
> 'asm inline' is a good hint if people know the real cost is quite small.
> Then, GCC will be able to inline more functions.
> 
> I do not know how important it is for U-Boot, though.
> 
> What is causing you a trouble?

So, it turns out that while we do want to grab the changes so that we
can have CC_HAS_ASM_INLINE via Kconfig, it's not "it".  What I see for
virtually every board (with gcc-9.3 from kernel.org) is something like:
            rock960-rk3399 : all -8 rodata -4 spl/u-boot-spl:all +992 spl/u-boot-spl:text +992 text -4
               u-boot: add: 67/-9, grow: 74/-92 bytes: 5072/-4928 (144)
                 function                                   old     new   delta
                 static._compare_and_overwrite_entry          -     348    +348
                 menu_interactive_choice                      -     288    +288
                 hex2bin                                      -     200    +200
                 __fswab64                                    -     176    +176
                 __fswab32                                    -     144    +144
                 sdhci_reset                                  -     136    +136
                 dwmci_fifo_ready                             -     124    +124
                 fdt_offset_ptr_                              -     120    +120
                 menu_items_iter                              -     108    +108
                 generic_fls                                  -     100    +100
                 fdt_set_totalsize                            -      96     +96
                 static.generic_fls                           -      84     +84
                 clk_get_by_indexed_prop                      -      80     +80
                 fdt_read_number                              -      76     +76
                 do_fdt                                    3984    4060     +76
                 usb_kbd_poll_for_event                       -      72     +72
                 rpc_lookup_req                               -      72     +72
                 menu_item_key_match                          -      72     +72
                 bin2hex                                      -      68     +68
                 asix_get_phy_addr                            -      68     +68
                 fdt_setprop_u64                              -      64     +64
                 fdt_set_size_dt_strings                      -      64     +64
                 fdt_set_off_dt_strings                       -      64     +64
                 zalloc                                       -      60     +60
                 static.strlcat                               -      60     +60
                 dwmci_wait_reset                             -      60     +60
                 menu_item_print                              -      56     +56
                 is_zero_ethaddr                              -      56     +56
                 asix_eth_start                             228     284     +56
                 set_sctlr                                    -      52     +52
                 menu_item_destroy                            -      52     +52
                 get_sctlr                                    -      48     +48
                 fdt_setprop_u32                              -      48     +48
                 is_valid_ethaddr                             -      44     +44
                 is_hex_prefix                                -      44     +44
                 fdt_data_size_                               -      44     +44
                 list_del                                     -      40     +40
                 fdt_mem_rsv_                                 -      40     +40
                 dev_read_u32_default                         -      40     +40
                 __tolower                                    -      40     +40
                 le32_to_int                                  -      36     +36
                 fdt_open_into                              392     428     +36
                 _debug_uart_putc                             -      36     +36
                 usb_gadget_disconnect                        -      32     +32
                 usb_gadget_connect                           -      32     +32
                 fdt_set_size_dt_struct                       -      32     +32
                 fdt_set_off_dt_struct                        -      32     +32
                 fdt_packblocks_                            176     208     +32
                 fdt_blocks_misordered_                      96     128     +32
                 __get_unaligned_le32                         -      32     +32
                 fdtdec_get_number                           48      76     +28
                 fdt_ro_probe_                              128     156     +28
                 env_flags_validate                         632     660     +28
                 clk_valid                                    -      28     +28
                 clk_set_rate                                52      80     +28
                 clk_set_parent                              52      80     +28
                 clk_get_rate                                52      80     +28
                 clk_free                                    44      72     +28
                 clk_enable                                  52      80     +28
                 clk_disable                                 52      80     +28
                 bootstage_error                              -      28     +28
                 asix_set_sw_mii                              -      28     +28
                 asix_set_hw_mii                              -      28     +28
                 uuid_str_to_bin                            396     420     +24
                 ofnode_read_u64                             92     116     +24
                 fdt_mem_rsv                                 60      84     +24
                 fdt_get_property_namelen                    44      68     +24
                 static.usb_ep_queue                          -      20     +20
                 static.image_get_size                        -      20     +20
                 is_extended                                  -      20     +20
                 flush_dcache_all                             -      20     +20
                 fdt_splice_mem_rsv_                         96     116     +20
                 fdt_offset_ptr                             104     124     +20
                 fdt_check_header                           276     296     +20
                 eth_validate_ethaddr_str                   152     172     +20
                 android_image_get_kcomp                     84     104     +20
                 usb_ep_free_request                          -      16     +16
                 static.image_get_magic                       -      16     +16
                 static.image_get_load                        -      16     +16
                 nfs_read_req                               228     244     +16
                 malloc_cache_aligned                         -      16     +16
                 image_print_contents                       448     464     +16
                 fit_get_end                                 16      32     +16
                 fdt_add_property_                          388     404     +16
                 dwc3_flush_cache                             -      16     +16
                 do_bootm_states                           2376    2392     +16
                 dev_read_bool                                -      16     +16
                 static.image_get_ep                          -      12     +12
                 static.dev_read_u32_default                  -      12     +12
                 nfs_readlink_reply                         336     348     +12
                 nfs_read_reply                             404     416     +12
                 fit_image_get_address                      132     144     +12
                 fdtdec_parse_phandle_with_args             336     348     +12
                 fdt_shrink_to_minimum                      220     232     +12
                 fdt_header_size                             12      24     +12
                 fdt_del_node                                96     108     +12
                 fdt_add_mem_rsv                            124     136     +12
                 boot_get_fdt                              1028    1040     +12
                 android_image_get_kernel                   572     584     +12
                 update_package_list                        280     288      +8
                 nfs_lookup_reply                           292     300      +8
                 net_copy_u32                                 -       8      +8
                 net_copy_ip                                  -       8      +8
                 image_multi_getimg                         132     140      +8
                 image_check_dcrc                            68      76      +8
                 guidcmp                                      -       8      +8
                 genimg_get_format                           92     100      +8
                 free_packagelist                            68      76      +8
                 fit_image_load                            1608    1616      +8
                 fdt_valid                                  204     212      +8
                 fdt_splice_struct_                          96     104      +8
                 fdt_rw_probe_                              108     116      +8
                 fdt_num_mem_rsv                             60      68      +8
                 fdt_next_tag                               256     264      +8
                 fdt_getprop_namelen                        100     108      +8
                 dhcp_extended                              616     624      +8
                 boot_get_ramdisk                           964     972      +8
                 xhci_submit_control_msg                   2732    2736      +4
                 static.image_get_hcrc                        -       4      +4
                 static.image_get_dcrc                        -       4      +4
                 static.__swab32p                             -       4      +4
                 sd_get_capabilities                        432     436      +4
                 rpc_req                                    288     292      +4
                 rpc_lookup_reply                           180     184      +4
                 print_data                                 444     448      +4
                 nfs_umountall_reply                        136     140      +4
                 nfs_readlink_req                           192     196      +4
                 nfs_mount_req                              180     184      +4
                 nfs_mount_reply                            148     152      +4
                 nfs_lookup_req                             324     328      +4
                 image_setup_libfdt                         284     288      +4
                 image_check_hcrc                            80      84      +4
                 fdtdec_get_int_array                        96     100      +4
                 fdt_setprop_placeholder                    216     220      +4
                 fdt_getprop_by_offset                      184     188      +4
                 fdt_get_string                             288     292      +4
                 fdt_get_property_namelen_                  212     216      +4
                 fdt_get_property_by_offset_                100     104      +4
                 fdt_get_phandle                            120     124      +4
                 fdt_get_mem_rsv                            108     112      +4
                 boot_relocate_fdt                          424     428      +4
                 spi_slave_ofdata_to_platdata               432     428      -4
                 sdhci_send_command                        1660    1656      -4
                 i2c_chip_ofdata_to_platdata                100      96      -4
                 file_fat_write_at                          652     648      -4
                 fdt_get_name                               164     160      -4
                 fat_size                                   204     200      -4
                 fat_opendir                                172     168      -4
                 fat_exists                                 128     124      -4
                 efi_search_protocol                        148     144      -4
                 efi_install_multiple_protocol_interfaces     552     548      -4
                 dwmci_send_cmd                            1556    1552      -4
                 remove_strings_package                     124     116      -8
                 fdt_splice_                                148     140      -8
                 fdt_pack_reg                               216     208      -8
                 fdt_add_subnode_namelen                    284     276      -8
                 fastboot_start_ep                          124     116      -8
                 efi_signal_event                           200     192      -8
                 efi_process_event_queue                    144     136      -8
                 efi_install_fdt                            868     860      -8
                 efi_install_configuration_table            456     448      -8
                 efi_disconnect_all_drivers                 404     396      -8
                 clk_set_defaults                           516     508      -8
                 ustrtoull                                  144     132     -12
                 ustrtoul                                   144     132     -12
                 rx_handler_dl_image                        204     192     -12
                 rx_handler_command                         368     356     -12
                 remove_keyboard_package                     76      64     -12
                 regulator_common_ofdata_to_platdata        188     176     -12
                 read_bootsectandvi                         308     296     -12
                 free_keyboard_layouts                       80      68     -12
                 file_fat_read_at                           864     852     -12
                 fat_mkdir                                  928     916     -12
                 fat_itr_root                               444     432     -12
                 fastboot_tx_write_str                      152     140     -12
                 fastboot_set_alt                           316     304     -12
                 efi_uninstall_protocol_interface           112     100     -12
                 efi_uninstall_protocol                     216     204     -12
                 efi_uninstall_multiple_protocol_interfaces     464     452     -12
                 efi_remove_protocol                        100      88     -12
                 efi_locate_handle                          380     368     -12
                 efi_exit_boot_services                     336     324     -12
                 efi_delete_handle                           60      48     -12
                 efi_close_protocol                         220     208     -12
                 dwc3_prepare_trbs                          772     760     -12
                 dwc3_gadget_uboot_handle_interrupt        1552    1540     -12
                 dwc3_gadget_giveback                       240     228     -12
                 g_dnl_bind                                 376     360     -16
                 fastboot_disable                           140     124     -16
                 ext4fs_iterate_dir                         656     640     -16
                 efi_locate_protocol                        280     264     -16
                 efi_add_protocol                           320     304     -16
                 dhcp_process_options                       512     496     -16
                 fat_unlink                                 668     648     -20
                 ext4fs_read_inode                          392     372     -20
                 ext4fs_mount                               236     216     -20
                 dhcp_handler                               972     952     -20
                 _parse_integer_fixup_radix                 248     228     -20
                 g_dnl_unbind                                52      28     -24
                 fdt_initrd                                 436     412     -24
                 efi_hii_package_len                         24       -     -24
                 dcache_status                               52      24     -28
                 usb_kbd_testc                              144     112     -32
                 usb_kbd_getc                               116      84     -32
                 ext4fs_find_file1                          660     628     -32
                 asix_eth_probe                             700     668     -32
                 dwc3_gadget_ep_enable                      264     228     -36
                 printch                                     80      40     -40
                 eth_write_hwaddr                           220     180     -40
                 efi_close_event                            268     224     -44
                 asix_mdio_write                            140      96     -44
                 add_packages                               928     884     -44
                 of_bus_default_map                         168     120     -48
                 menu_destroy                               128      80     -48
                 of_bus_default_translate                   184     132     -52
                 mmc_init                                  2724    2668     -56
                 static.dwmci_wait_reset                     60       -     -60
                 __of_translate_address                     624     564     -60
                 remove_guid_package                         64       -     -64
                 menu_item_add                              240     176     -64
                 menu_default_set                           148      76     -72
                 icache_disable                             100      24     -76
                 static.clk_get_by_indexed_prop              80       -     -80
                 dcache_disable                             132      48     -84
                 icache_enable                              116      28     -88
                 nfs_send                                   260     168     -92
                 xhci_microframes_to_exponent               104       -    -104
                 skip_num                                   104       -    -104
                 spi_nor_scan                              2196    2088    -108
                 part_get_info_extended                     716     604    -112
                 static.dwmci_fifo_ready                    124       -    -124
                 static.sdhci_reset                         136       -    -136
                 print_partition_extended                   648     512    -136
                 asix_mdio_read                             140       -    -140
                 static.parse_attr                          468     308    -160
                 efi_set_variable_common                   1440    1276    -164
                 efi_get_variable_common                    548     384    -164
                 eth_post_probe                             580     404    -176
                 dcache_enable                              272      44    -228
                 read_allocated_block                      2120    1832    -288
                 hsearch_r                                 1080     728    -352
                 menu_get_choice                            480      84    -396
               spl-u-boot-spl: add: 23/-5, grow: 25/-12 bytes: 1700/-768 (932)
                 function                                   old     new   delta
                 sdhci_reset                                  -     136    +136
                 __fswab64                                    -     132    +132
                 dwmci_fifo_ready                             -     124    +124
                 fdt_offset_ptr_                              -     120    +120
                 __fswab32                                    -     104    +104
                 fdt_mem_rsv_                                 -      80     +80
                 clk_get_by_indexed_prop                      -      80     +80
                 fdt_set_size_dt_strings                      -      64     +64
                 fdt_set_off_dt_strings                       -      64     +64
                 dwmci_wait_reset                             -      60     +60
                 set_sctlr                                    -      52     +52
                 get_sctlr                                    -      48     +48
                 fdt_setprop_u32                              -      48     +48
                 fdt_data_size_                               -      44     +44
                 __tolower                                    -      40     +40
                 _debug_uart_putc                             -      36     +36
                 fdt_set_size_dt_struct                       -      32     +32
                 fdt_set_off_dt_struct                        -      32     +32
                 fdtdec_get_number                           48      76     +28
                 fdt_offset_ptr                              52      80     +28
                 clk_valid                                    -      28     +28
                 clk_set_rate                                52      80     +28
                 clk_set_parent                              52      80     +28
                 clk_get_rate                                52      80     +28
                 ofnode_read_u64                             92     116     +24
                 flush_dcache_all                             -      20     +20
                 fdt_splice_mem_rsv_                         96     116     +20
                 fdt_check_header                            28      44     +16
                 dev_read_u32_default                         -      16     +16
                 dev_read_bool                                -      16     +16
                 fit_image_get_address                      132     144     +12
                 fdtdec_parse_phandle_with_args             336     348     +12
                 fdt_shrink_to_minimum                      220     232     +12
                 fdt_get_property_by_offset_                 36      48     +12
                 fdt_add_property_                          340     352     +12
                 fdt_splice_struct_                          96     104      +8
                 fdt_get_string                              64      72      +8
                 fdt_add_mem_rsv                            112     120      +8
                 static.__swab32p                             -       4      +4
                 sd_get_capabilities                        432     436      +4
                 fdtdec_get_int_array                        96     100      +4
                 fdt_setprop_placeholder                    196     200      +4
                 fdt_num_mem_rsv                             64      68      +4
                 fdt_next_tag                               192     196      +4
                 fdt_getprop_by_offset                       80      84      +4
                 fdt_get_property_namelen_                  200     204      +4
                 fdt_get_phandle                            120     124      +4
                 fdt_get_mem_rsv                             52      56      +4
                 sdhci_send_command                        1660    1656      -4
                 fdt_del_mem_rsv                            104     100      -4
                 dwmci_send_cmd                            1556    1552      -4
                 fdt_splice_                                148     140      -8
                 fdt_add_subnode_namelen                    260     252      -8
                 fdt_get_name                                68      56     -12
                 clk_set_defaults                           488     472     -16
                 fdt_mem_rsv                                 20       -     -20
                 _parse_integer_fixup_radix                 248     228     -20
                 fdt_record_loadable                        372     336     -36
                 printch                                     80      40     -40
                 static.dwmci_wait_reset                     60       -     -60
                 static.clk_get_by_indexed_prop              80       -     -80
                 dcache_disable                             132      48     -84
                 mmc_init                                  4576    4464    -112
                 static.dwmci_fifo_ready                    124       -    -124
                 static.sdhci_reset                         136       -    -136

Which is not good, and I need to dig in to a bit more to see what
changes cause this.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200513/ad19d04f/attachment.sig>


More information about the U-Boot mailing list