Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doesn't compile with avrgcc 10.3.0 in Arch GNU/Linux #93

Open
Virtual-Java opened this issue May 3, 2021 · 11 comments
Open

Doesn't compile with avrgcc 10.3.0 in Arch GNU/Linux #93

Virtual-Java opened this issue May 3, 2021 · 11 comments

Comments

@Virtual-Java
Copy link

Compiling Hoodloader2 with avrgcc version 10.3.0 results in the error:
make
[INFO] : Begin compilation of project "HoodLoader2"...
avr-gcc (GCC) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[LNK] : Linking object files into "HoodLoader2.elf"
avr-gcc obj/HoodLoader2.o obj/Descriptors.o obj/BootloaderAPI.o obj/BootloaderAPITable.o obj/HID>
/usr/bin/avr-ld: section .apitable_trampolines LMA [0000000000003fa0,0000000000003fb7] overlaps >
collect2: error: ld returned 1 exit status
make: *** [../lufa/LUFA/Build/DMBS/DMBS/gcc.mk:251: HoodLoader2.elf] Fehler 1

@NicoHood
Copy link
Owner

NicoHood commented May 3, 2021

Yes I know, the size is too large. And I have no clue what was changed in the last versions. Maybe we can improve by enabling a magic compiler switch I do not know yet :-/

@NicoHood
Copy link
Owner

NicoHood commented May 3, 2021

@anatol can you maybe help here? Do you know of any major gcc change that causes bootloaders to compile with larger sizes?

@anatol
Copy link

anatol commented May 3, 2021

I do not know what change can affect it.

But let's see what can be found here. Is the problem that apitable_trampolines section grew over some limit? Does apitable_trampolines section come from https://github.com/NicoHood/HoodLoader2/blob/master/avr/bootloaders/DFU/BootloaderAPITable.S ?

If yes then I wonder if jmp or ret instruction size has changed e.g. due to changed memory model (e.g. was a relative jump became a long jump). @Virtual-Java could you please provide a disassembled section content for apitable_trampolines before and after the compiler change.

@anatol
Copy link

anatol commented May 3, 2021

Also I am about to push avr-gcc 11.1 to arch testing. You might want to test that compiler version just in case.

@Virtual-Java
Copy link
Author

Virtual-Java commented May 4, 2021

It seams that gcc-5.4 and gcc-10.3 produce almost the same output. The only
difference is that gcc-5.4 compiles with success while gcc-10.3 ends with linking errors. To analyze the differences between the files created by gcc I used Githubs compare function:
https://github.com/Virtual-Java/HoodLoader2/tree/arch-gcc10-error
https://github.com/Virtual-Java/HoodLoader2/tree/mint-gcc5

Edit (by nicohood):
Virtual-Java/HoodLoader2@mint-gcc5...Virtual-Java:arch-gcc10-error

@NicoHood
Copy link
Owner

NicoHood commented May 4, 2021

I want to note, that this error happens when the size is larger than those defined 4kb. You can edit the makefile and set it to 5kb and it will compile fine. However the bootloader will of course not work. I thought that the original reason was that the newer gcc produces are larger output binary which breaks the linking afterwards.

Looking at the map file I can see more debug entries. But I have no idea if that is relevant:
Virtual-Java/HoodLoader2@mint-gcc5...Virtual-Java:arch-gcc10-error#diff-c2f34ddeeacd7bc82bf1c5be8107e0e4c134735ba8d66f5913b9588660961224R23-R104

@Virtual-Java
Copy link
Author

Sorry for my prediction there is no difference between the output of the two gcc versions.
However it was an error due to cloning the repository together with the complete output from the compilation before with gcc-5.4. When you compile with gcc and the object and .elf files already exist from the previous compilation (with the older gcc version), gcc prints out a message that makes you believe compilation succeeded but it didn't. You can get rid of the output from previous compilation by deleting the objects directory and the .elf file.
In fact there are significant differences!
Comparing the .lss files it's conspicuous that the text section has more content now (f5e vs. 100a) and there is no trampoline_end section anymore.
Virtual-Java/HoodLoader2@mint-gcc5...Virtual-Java:virtual-5kB-bootsize-test

@NicoHood
Copy link
Owner

NicoHood commented May 5, 2021

Note: Use make clean to cleanup any previously compiled files.

@NicoHood
Copy link
Owner

Did you manage to solve this flash issue?

@Virtual-Java
Copy link
Author

After multiple tries in vain with different optimization options and avr-gcc-12.0.1, I decided to create
a package using the gcc-version offered for download by microchip.
You can find my package that solved this flash issue for me in the aur.

However getting the pkgbuilt to compile with recent gcc-versions was a lot of work.
Compile sizes are now the same as in debian based distros that optain avr-gcc-atmel-5.4.0 by utilizing apt.

Since I don't have the permissions to maintain the repository owned by another maintainer in the aur, I temporarily created a fork that contains my changes on github.
How can I get the maintainer of such an package in the AUR marked as orphan?

@NicoHood
Copy link
Owner

NicoHood commented Jun 5, 2022

You have opened a merge request, but you rather want to orphan it. I am a trusted user, so I did that for you. You can now take ownership over the package and push your changes. Sounds like a good plan.

I guess you have spend tons of time in research why it does not work. I am still wondering why this is so difficult. That is really a pity, as when gcc versions move on, we will no longer be able to compile this package. This is somehow a downgrade from older versions, which should not happen. Can't we open a bug report at the gcc compiler? Maybe the guys there know it better?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants