[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [PATCH] modutils: fix config options dependency (2)
From:       Kang-Che Sung <explorer09 () gmail ! com>
Date:       2017-02-07 16:52:53
Message-ID: CADDzAfPjy9yeg51udc_R-Z_PDTo-+RmMZC5yX5CgBT8o+HoSaw () mail ! gmail ! com
[Download RAW message or body]

On Tue, Feb 7, 2017 at 11:40 PM, Denys Vlasenko
<vda.linux@googlemail.com> wrote:
> On Tue, Feb 7, 2017 at 4:38 PM, Kang-Che Sung <explorer09@gmail.com> wrote:
>> On Tue, Feb 7, 2017 at 11:21 PM, Denys Vlasenko
>> <vda.linux@googlemail.com> wrote:
>>>
>>> How about this?
>>>
>>> -       if (is_depmod || is_modprobe) {
>>> +       if ((MOD_APPLET_CNT == 2 && ENABLE_MODPROBE && ENABLE_DEPMOD)
>>> +        || is_depmod || is_modprobe
>>> +       ) {
>>
>> You can imagine how it will evaluate for this configuration:
>>
>> #define ENABLE_DEPMOD 1
>> #define ENABLE_MODPROBE 1
>> #define ENABLE_INSMOD 1
>> /* ENABLE_RMMOD is not set */
>>
>> MOD_APPLET_CNT==3
>>
>> (MOD_APPLET_CNT == 2) evaluates to false (0)
>> is_depmod expands to (applet_name[0]=='d')
>> is_modprobe expands to (applet_name[0]=='m')
>>
>> So the whole expression becomes
>> (applet_name[0]=='d' || applet_name[0]=='m')
>>
>> I would prefer the smaller comparison: (applet_name[0] != 'i')
>> Or the equal sized one: (applet_name[0] & '\4')
>>
>> This is the MOD_APPLET_CNT==3 case that I've thought of.
>
> The difference would be +1 2-byte asm instruction on x86.

No, actually it's +2 2-byte asm instructions, one for "cmp" and one for "je".

I just tried compiling it in gcc-6.3.0, and disassembled to read which
instructions are added. And so I'm sure this is the result.

Attaching part of my "objdump -d -r modprobe-small.o" output

    Disassembly of section .text.modprobe_main:
    [---truncated---]
      34: 48 8b 05 00 00 00 00 mov    0x0(%rip),%rax        # 3b
<modprobe_main+0x3b>
            37: R_X86_64_PC32 applet_name-0x4
      3b: 8a 00                 mov    (%rax),%al
      3d: 3c 64                 cmp    $0x64,%al
      3f: 74 04                 je     45 <modprobe_main+0x45>
      41: 3c 6d                 cmp    $0x6d,%al
      43: 75 14                 jne    59 <modprobe_main+0x59>
      45: bf 00 00 00 00       mov    $0x0,%edi
            46: R_X86_64_32 .rodata.modprobe_main.str1.1 #
CONFIG_DEFAULT_MODULES_DIR
      4a: e8 00 00 00 00       callq  4f <modprobe_main+0x4f>
            4b: R_X86_64_PC32 xchdir-0x4
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic