On 07.05.2024 19:37, Julien Grall wrote: > > > On 07/05/2024 17:55, Edgar E. Iglesias wrote: >> On Tue, May 7, 2024 at 11:57 AM Julien Grall <jul...@xen.org> wrote: >> Hi Julien, > > Hi Edgar, > >> >> The reason I choose FUNC for the start of the symbol is because these >> symbols contain >> executable code (not only a table of pointers to code somewhere else) >> and the ELF spec >> says that STT_FUNC means the symbol contains functions or other executable >> code (not only callable functions IIUC): >> >> "STT_FUNC The symbol is associated with a function or other executable code." >> https://refspecs.linuxbase.org/elf/elf.pdf >> (Symbol Table 1-20). > > Thanks for the pointer. I originally did intend to suggest the change, > but then I saw the use of LABEL in x86 (such as svm_stgi_label). There > are a few others example with LABEL_LOCAL. > > AFAICT, this is also executable code which the only difference that it > is not meant to be called by someone else. Furthermore, LABEL is using > DO_CODE_ALIGN(...) for the alignment which imply that it is intended to > be used by executable code. So I thought the only difference was whether > the label was intended to be used as a function.
No. See below. >> I think using LABEL instead of GLOBAL for the _end labels of these >> code sequences makes sense. >> I'm happy to change the _start labels to LABEL too if you guys feel >> that's better. > > I have to admit I am little confused with the difference between LABEL > vs FUNC. I think I will need some guidance from Jan (he introduced > linkage.h). For annotations the question is what is a "unit" of code. That wants to be enclosed in FUNC() / END(). Any "inner" entry points or markers would use LABEL(). On x86 I think it's mainly markers (i.e. addresses pointing into code which we need e.g. for comparison operations on what Arm would call PC) where we use LABEL(). Jan