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

Alexey Kardashevskiy aik at ozlabs.ru
Sat Oct 2 12:32:22 AEST 2021



On 01/10/2021 16:57, Thomas Huth wrote:
> On 01/10/2021 06.54, Alexey Kardashevskiy wrote:
>>
>>
>> On 30/09/2021 20:29, Alexey Kardashevskiy wrote:
>>>
>>>
>>> On 30/09/2021 20:01, Alexey Kardashevskiy wrote:
>>>>
>>>>
>>>> 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.
>>>> https://github.com/aik/SLOF-debug/commit/3902aab6fd702aa5c1b0d7c4bd9ac9dd82ae4d71 
>>>>
>>>>
>>>> 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
>>>>
>>>> https://git.qemu.org/?p=SLOF.git;a=blob;f=board-js2x/rtas/Makefile;h=5ab5c34c74999dafd354de39b2ee1c7af305ce22;hb=HEAD#l55 
>>>>
>>>>
>>>>
>>>> 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.
>>>
>>>
>>>
>>> This helped:
>>>
>>> diff --git a/tools/create_reloc_table.sh b/tools/create_reloc_table.sh
>>> index 8cacb742a701..d4790ddff0b0 100755
>>> --- a/tools/create_reloc_table.sh
>>> +++ b/tools/create_reloc_table.sh
>>> @@ -54,7 +54,7 @@ $OBJCOPY -O binary $TMP2.o $TMP2.bin || exit -1
>>>   # Create the relocation table with gen_reloc_table:
>>>   $DIRNAME/gen_reloc_table $TMP1.bin $TMP2.bin reloc_table.bin
>>>
>>> -$LD -o reloc_table.o -bbinary reloc_table.bin -e0 || exit -1
>>> +$LD -r -o reloc_table.o -bbinary reloc_table.bin -e0 || exit -1
>>>   $OBJCOPY --rename-section .data=.reloc reloc_table.o reloc_table.o ||
>>> exit -1
>>>
>>>
>>>
>>> continuing digging...
>>
>>
>> I ended up reverting it. Thanks,
>>
>>
>> ps. I pushed out everything else in the queue (which is now empty).
> 
> Thanks! js2x now compiles fine for me again, too.
> 
> Could you maybe now also enable Travis-CI for your repo at github, so 
> that we have an indication in the main commit history there to see when 
> things break?

I did this for https://github.com/aik/SLOF-debug and I am going to push 
it there first.
I do not want to do the same for the main repo as if there is a problem, 
it might be late for fixing it as that repo gets synced to git.qemu.org 
and who knows where else (gitlab?).


-- 
Alexey


More information about the SLOF mailing list