[SLOF] [PATCH slof] make: Define default rule for .c when V=1 or V=2

Alexey Kardashevskiy aik at ozlabs.ru
Thu Sep 30 20:01:04 AEST 2021

On 31/08/2021 19:58, Thomas Huth wrote:
> On 31/08/2021 11.56, Thomas Huth wrote:
>> On 31/08/2021 11.52, Alexey Kardashevskiy wrote:
>>> On 31/08/2021 19:38, Thomas Huth wrote:
>>>> On 31/08/2021 11.30, Alexey Kardashevskiy wrote:
>>>>> On 31/08/2021 19:26, Thomas Huth wrote:
>>>>>> On 11/03/2020 03.37, Alexey Kardashevskiy wrote:
>>>>>>> The default .o:.c rule passes a short file name to gcc to when doing
>>>>>>> "make -C <dir>", we do this a lot for all the libraries.
>>>>>>> The file names printed in gcc errors are relative to <dir> and this
>>>>>>> prevents vim from navigating through errors.
>>>>>>> This passes the full file name to gcc to make it print errors with
>>>>>>> absolute path so vim can navigate through errors nicely.
>>>>>>> This makes it optional when V=1 or V=2 is passed.
>>>>>>> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
>>>>>>> ---
>>>>>>> Or there is a better way of doing this?
>>>>>>> I find it very annoying to work with ./lib/xxxx as we chdir a lot
>>>>>>> and gcc does not have a flag to print full file names.
>>>>>> This patch broke the compilation of "make js2x" ... thus js2x does not 
>>>>>> compile anymore since more than a year now. Shall we fix it, or shall 
>>>>>> we maybe rather remove the js2x code from the repository?
>>>>> It does not compile for me neither way - upstream or upstream + reverted 
>>>>> "make: Define default rule for .c when V=1 or V=2". It should not affect 
>>>>> building with V=0 anyway, unless I missed something, did I?
>>>> For me, js2x still compiles with some warnings if I revert the patch. 
>>>> What error do you get?
>>>> (I'm getting some errors with version.h when running "make distclean" 
>>>> after building js2x though)
>>> Many "multiple definition of" like this one:
>>> [fstn1-p1 slof]$ make -j 100  js2x
>>> ******** Building js2x system ********
>>>   ====== Building clients ======
>>>   ====== Building common libraries ======
>>>   ====== Building llfw ======
>>>   ====== Building slof ======
>>>   ====== Building rtas ======
>>> ld: rtas_board.o:/home/aik/p/slof/board-js2x/include/bmc.h:27: multiple 
>>> definition of `bmc_get_blade_descr'; 
>>> rtas_flash.o:/home/aik/p/slof/board-js2x/include/bmc
>>> .h:27: first defined here
>> That sounds like your compiler defaults to -fno-common now ... try to add an 
>> "extern" in front of that line in bmc.h to see whether that fixes the issue.
> Or even better: Move the line from bmc.h into board-js2x/rtas/rtas_board.c 
> since that's the only spot where it is used.

I poked this thing a bit.

I has reverted "make: Define default rule for .c when V=1 or V=2" for
now. The error I am getting is "ld: cannot use executable file
'reloc_table.o' as input to a link" which comes from:

[fstn1-p1 rtas]$ ld -melf64ppc -nostdlib -o rtas -T
/home/aik/p/slof/rtas/rtas.lds /home/aik/p/slof/rtas/rtas_entry.o
/home/aik/p/slof/rtas/rtas_common.o /home/aik/p/slof/rtas/reloc.o
/home/aik/p/slof/rtas/rtas_call.o  rtas_flash.o rtas_board.o rtas_pci.o
rtas_out.o rtas_table.o i2c_bmc.o ipmi_oem.o ../llfw/hw.o
../../lib/libc.a ../../lib/libipmi.a
/home/aik/p/slof/rtas/flash/block_lists.o reloc_table.o
ld: cannot use executable file 'reloc_table.o' as input to a link
[fstn1-p1 rtas]$ file reloc_table.o
reloc_table.o: ELF 64-bit MSB executable, 64-bit PowerPC or cisco 7500,
version 1 (SYSV), statically linked, not stripped


I am stuck with this one, ideas how to fix that? Googling suggested "-z
allowexec" which is not recognized by my ld 2.36.1.


More information about the SLOF mailing list