This patch introduces a new avr specific command option '-nodevicelib' so that linking of libdev.a can be bypassed. The argument of -specs= is suffixed by %s instead of supplying the absolute path. That way -specs= works with installation path that contains spaces. avr_mct_t.library_name and its initializers in avr-mcus.def are cleaned up. This field was used to define __AVR_DEV_LIB_NAME__. If no device macro is defined because a device is not supported by avr-gcc, that hook macro can be defined to tell avr/io.h where to find the device's header file. This means it is pointless to define __AVR_DEV_LIB_NAME__ in avr-gcc: If a device is supported, the device macro (e.g. __AVR_ATmega8__) is defined and __AVR_DEV_LIB_NAME__ will never be used. The patch adds more help text to the device specs file to inform a potential reader about the role of the hook macro __AVR_DEV_LIB_NAME__. The patch also removes specs known to GCC and which don't directly depend on the device from the device specs file. This makes the specs file smaller and easier less confusing. Ok for trunk? Johann PR target/65296 * config/avr/avrlibc.h (LIB_SPEC, LIBGCC_SPEC) [AVR1]: Don't link libgcc.a, libc.a, libm.a. * config/avr/specs.h: Same. * config/avr/gen-avr-mmcu-specs.c (print_mcu): Don't print specs which don't (directly) depend on the device. Print more help. (*avrlibc_devicelib) [-nodevicelib]: Don't link libdev.a. (*cpp): Don't define __AVR_DEV_LIB_NAME__. * config/avr/driver-avr.c: Remove -nodevicelib from option list in case of an error. (avr_devicespecs_file): Use suffix "%s" instead of absolute path. for specs file name instead of absolute path. * config/avr/avr-arch.h (avr_mcu_t) [.library_name]: Remove. * config/avr/avr-mcus.def: Same: Adjust initializers. * config/avr/avr.opt (-nodevicelib): New option. * doc/invoke.texi (AVR Options): Document it.