On Mon, Apr 24, 2017 at 06:02:51PM +0200, Jiri Slaby wrote: > On 04/24/2017, 05:55 PM, Ingo Molnar wrote: > > * Jiri Slaby <jsl...@suse.cz> wrote: > > > >> On 04/24/2017, 05:08 PM, David Miller wrote: > >>> If you align the entry points, then the code sequence as a whole is > >>> are no longer densely packed. > >> > >> Sure. > >> > >>> Or do I misunderstand how your macros work? > >> > >> Perhaps. So the suggested macros for the code are: > >> #define BPF_FUNC_START_LOCAL(name) \ > >> SYM_START(name, SYM_V_LOCAL, SYM_A_NONE) > >> #define BPF_FUNC_START(name) \ > >> SYM_START(name, SYM_V_GLOBAL, SYM_A_NONE) > >> > >> and they differ from the standard ones: > >> #define SYM_FUNC_START_LOCAL(name) \ > >> SYM_START(name, SYM_V_LOCAL, SYM_A_ALIGN) > >> #define SYM_FUNC_START(name) \ > >> SYM_START(name, SYM_V_GLOBAL, SYM_A_ALIGN) > >> > >> > >> The difference is SYM_A_NONE vs. SYM_A_ALIGN, which means: > >> #define SYM_A_ALIGN ALIGN > >> #define SYM_A_NONE /* nothing */ > >> > >> Does it look OK now? > > > > No, the patch changes alignment which is undesirable, it needs to preserve > > the > > existing (non-)alignment of the symbols! > > OK, so I am not expressing myself explicitly enough, it seems. > > So, correct, the patch v3 adds alignments. I suggested in the discussion > the macros above. They do not add alignments. If everybody is OK with > that, v4 of the patch won't add alignments. OK?
can we go back to what problem this patch set is trying to solve? Sounds like you want to add _function_ start/end marks to aid debugging? Debugging with what? What tool will recognize this stuff? Take a look at what your patch does: +ENTRY(sk_load_word) test %esi,%esi js bpf_slow_path_word_neg +ENDPROC(sk_load_word) Does above two assembler instructions look like a function? or this: +ENTRY(sk_load_byte_positive_offset) cmp %esi,%r9d /* if (offset >= hlen) goto bpf_slow_path_byte */ jle bpf_slow_path_byte movzbl (SKBDATA,%rsi),%eax ret +ENDPROC(sk_load_byte_positive_offset) This assembler code doesn't represent functions. There is no prologue/epilogue and no stack frame. JITed code uses 'call' insn to jump into them, but they're not your typical C functions. Take a look at bpf_slow_path_common() macro that creates the frame before calling into C code with 'call skb_copy_bits;' I still think that this code should be left alone. Even macro names you're proposing: #define BPF_FUNC_START_LOCAL don't sound right. These are not functions.