aboutsummaryrefslogtreecommitdiff
path: root/tools/avr_codegen
diff options
context:
space:
mode:
authorcnlohr <lohr85@gmail.com>2016-12-03 21:16:13 -0500
committercnlohr <lohr85@gmail.com>2016-12-03 21:16:13 -0500
commit368f4dcca9f8fdadfee527345b59f7a7ba6d6367 (patch)
treeeaf7b4f4a281cd892dee7159df9ca7b4ff2c7cf8 /tools/avr_codegen
parent684b109e8cd3246c93fdec3e63157bbd11bb359a (diff)
downloadlibsurvive-368f4dcca9f8fdadfee527345b59f7a7ba6d6367.tar.gz
libsurvive-368f4dcca9f8fdadfee527345b59f7a7ba6d6367.tar.bz2
Update tools encode a 2.5 MHz signal with the AVR.
Diffstat (limited to 'tools/avr_codegen')
-rw-r--r--tools/avr_codegen/Makefile37
-rw-r--r--tools/avr_codegen/test.c45
-rwxr-xr-xtools/avr_codegen/test.elfbin0 -> 6740 bytes
-rw-r--r--tools/avr_codegen/test.hex10
-rw-r--r--tools/avr_codegen/test.lst444
-rw-r--r--tools/avr_codegen/test.map379
-rw-r--r--tools/avr_codegen/test.obin0 -> 6048 bytes
7 files changed, 915 insertions, 0 deletions
diff --git a/tools/avr_codegen/Makefile b/tools/avr_codegen/Makefile
new file mode 100644
index 0000000..fc2c712
--- /dev/null
+++ b/tools/avr_codegen/Makefile
@@ -0,0 +1,37 @@
+
+all : test.hex burn test.lst
+PART=attiny85
+PROGPART=t85
+
+CFLAGS=-g -Wall -Os -mmcu=$(PART) -DF_CPU=8000000UL
+ASFLAGS:=$(CFLAGS)
+CC=avr-gcc
+
+
+test.hex : test.elf
+ avr-objcopy -j .text -j .data -O ihex test.elf test.hex
+
+test.elf : test.c
+ avr-gcc -I -g $(CFLAGS) -mmcu=$(PART) -Wl,-Map,test.map -o $@ test.c -L/usr/lib/binutils/avr/2.18
+
+test.lst : test.c
+ avr-gcc -c -g -Wa,-a,-ad $(CFLAGS) test.c > $@
+
+burn : test.hex
+ avrdude -c usbtiny -p $(PROGPART) -V -U flash:w:test.hex
+
+#For PLL
+burnfuses :
+ avrdude -c usbtiny -p $(PROGPART) -U lfuse:w:0x41:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
+
+burnfuses_legacy_timer_1 :
+ avrdude -c usbtiny -p $(PROGPART) -U lfuse:w:0x53:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
+
+burnfuses_default :
+ avrdude -c usbtiny -p $(PROGPART) -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
+
+readfuses :
+ avrdude -c usbtiny -p $(PROGPART) -U hfuse:r:high.txt:b -U lfuse:r:low.txt:b
+
+clean :
+ rm -f *~ high.txt low.txt test.hex test.map test.elf *.o sendpack.S makesendpack
diff --git a/tools/avr_codegen/test.c b/tools/avr_codegen/test.c
new file mode 100644
index 0000000..e962e09
--- /dev/null
+++ b/tools/avr_codegen/test.c
@@ -0,0 +1,45 @@
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <avr/sleep.h>
+#include <util/delay.h>
+
+void delay_ms(uint32_t time) {
+ uint32_t i;
+ for (i = 0; i < time; i++) {
+ _delay_ms(1);
+ }
+}
+
+#define NOOP asm volatile("nop" ::)
+
+
+static void setup_clock( void )
+{
+ /*Examine Page 33*/
+
+ CLKPR = 0x80; /*Setup CLKPCE to be receptive*/
+ CLKPR = 0x00; /*No scalar*/
+ OSCCAL = 0x80; //B8 is bottom E8 is top.
+}
+
+int main( )
+{
+ cli();
+ setup_clock();
+ DDRB = _BV(4);
+ uint8_t marker;
+
+ while(1)
+ {
+ marker = 0x05;
+ do{
+ PORTB = _BV(4);
+ marker--;
+ PORTB = 0;
+ } while( marker );
+
+ _delay_us(1000000/60);
+ }
+
+ return 0;
+}
diff --git a/tools/avr_codegen/test.elf b/tools/avr_codegen/test.elf
new file mode 100755
index 0000000..7f7fce9
--- /dev/null
+++ b/tools/avr_codegen/test.elf
Binary files differ
diff --git a/tools/avr_codegen/test.hex b/tools/avr_codegen/test.hex
new file mode 100644
index 0000000..cf54bf7
--- /dev/null
+++ b/tools/avr_codegen/test.hex
@@ -0,0 +1,10 @@
+:100000000EC015C014C013C012C011C010C00FC064
+:100010000EC00DC00CC00BC00AC009C008C011241E
+:100020001FBECFE5D2E0DEBFCDBF1AD02DC0E8CFD6
+:100030000F931F9300E010E0980106171707280799
+:10004000390759F0EFECF7E03197F1F700C0000005
+:100050000F5F1F4F2F4F3F4FF0CF1F910F9108950C
+:10006000F89480E886BD16BC81BF80E187BB90E133
+:1000700085E098BB18BA8150E1F7E3E3F2E83197E5
+:0C008000F1F700C00000F4CFF894FFCFAF
+:00000001FF
diff --git a/tools/avr_codegen/test.lst b/tools/avr_codegen/test.lst
new file mode 100644
index 0000000..69e5020
--- /dev/null
+++ b/tools/avr_codegen/test.lst
@@ -0,0 +1,444 @@
+GAS LISTING /tmp/ccWx46oe.s page 1
+
+
+ 1 .file "test.c"
+ 2 __SP_H__ = 0x3e
+ 3 __SP_L__ = 0x3d
+ 4 __SREG__ = 0x3f
+ 5 __tmp_reg__ = 0
+ 6 __zero_reg__ = 1
+ 9 .text
+ 10 .Ltext0:
+ 104 .global delay_ms
+ 106 delay_ms:
+ 107 .stabd 46,0,0
+ 1:test.c **** #include <avr/io.h>
+ 2:test.c **** #include <avr/interrupt.h>
+ 3:test.c **** #include <avr/sleep.h>
+ 4:test.c **** #include <util/delay.h>
+ 5:test.c ****
+ 6:test.c **** void delay_ms(uint32_t time) {
+ 109 .LM0:
+ 110 .LFBB1:
+ 111 0000 0F93 push r16
+ 112 0002 1F93 push r17
+ 113 /* prologue: function */
+ 114 /* frame size = 0 */
+ 115 /* stack size = 2 */
+ 116 .L__stack_usage = 2
+ 7:test.c **** uint32_t i;
+ 8:test.c **** for (i = 0; i < time; i++) {
+ 118 .LM1:
+ 119 0004 00E0 ldi r16,0
+ 120 0006 10E0 ldi r17,0
+ 121 0008 9801 movw r18,r16
+ 122 .L2:
+ 124 .LM2:
+ 125 000a 0617 cp r16,r22
+ 126 000c 1707 cpc r17,r23
+ 127 000e 2807 cpc r18,r24
+ 128 0010 3907 cpc r19,r25
+ 129 0012 01F0 breq .L5
+ 130 .LBB6:
+ 131 .LBB7:
+ 133 .Ltext1:
+ 1:/usr/lib/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
+ 2:/usr/lib/avr/include/util/delay.h **** Copyright (c) 2004,2005,2007 Joerg Wunsch
+ 3:/usr/lib/avr/include/util/delay.h **** Copyright (c) 2007 Florin-Viorel Petrov
+ 4:/usr/lib/avr/include/util/delay.h **** All rights reserved.
+ 5:/usr/lib/avr/include/util/delay.h ****
+ 6:/usr/lib/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without
+ 7:/usr/lib/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met:
+ 8:/usr/lib/avr/include/util/delay.h ****
+ 9:/usr/lib/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright
+ 10:/usr/lib/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer.
+ 11:/usr/lib/avr/include/util/delay.h ****
+ 12:/usr/lib/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright
+ 13:/usr/lib/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in
+ 14:/usr/lib/avr/include/util/delay.h **** the documentation and/or other materials provided with the
+ 15:/usr/lib/avr/include/util/delay.h **** distribution.
+ 16:/usr/lib/avr/include/util/delay.h ****
+ GAS LISTING /tmp/ccWx46oe.s page 2
+
+
+ 17:/usr/lib/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of
+ 18:/usr/lib/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived
+ 19:/usr/lib/avr/include/util/delay.h **** from this software without specific prior written permission.
+ 20:/usr/lib/avr/include/util/delay.h ****
+ 21:/usr/lib/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ 22:/usr/lib/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ 23:/usr/lib/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ 24:/usr/lib/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ 25:/usr/lib/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ 26:/usr/lib/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ 27:/usr/lib/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ 28:/usr/lib/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ 29:/usr/lib/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ 30:/usr/lib/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ 31:/usr/lib/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
+ 32:/usr/lib/avr/include/util/delay.h ****
+ 33:/usr/lib/avr/include/util/delay.h **** /* $Id$ */
+ 34:/usr/lib/avr/include/util/delay.h ****
+ 35:/usr/lib/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
+ 36:/usr/lib/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
+ 37:/usr/lib/avr/include/util/delay.h ****
+ 38:/usr/lib/avr/include/util/delay.h **** #ifndef __HAS_DELAY_CYCLES
+ 39:/usr/lib/avr/include/util/delay.h **** #define __HAS_DELAY_CYCLES 1
+ 40:/usr/lib/avr/include/util/delay.h **** #endif
+ 41:/usr/lib/avr/include/util/delay.h ****
+ 42:/usr/lib/avr/include/util/delay.h **** #include <inttypes.h>
+ 43:/usr/lib/avr/include/util/delay.h **** #include <util/delay_basic.h>
+ 44:/usr/lib/avr/include/util/delay.h **** #include <math.h>
+ 45:/usr/lib/avr/include/util/delay.h ****
+ 46:/usr/lib/avr/include/util/delay.h **** /** \file */
+ 47:/usr/lib/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Convenience functions for busy-wait delay loops
+ 48:/usr/lib/avr/include/util/delay.h **** \code
+ 49:/usr/lib/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz
+ 50:/usr/lib/avr/include/util/delay.h **** //#define F_CPU 14.7456E6
+ 51:/usr/lib/avr/include/util/delay.h **** #include <util/delay.h>
+ 52:/usr/lib/avr/include/util/delay.h **** \endcode
+ 53:/usr/lib/avr/include/util/delay.h ****
+ 54:/usr/lib/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the
+ 55:/usr/lib/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile.
+ 56:/usr/lib/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be
+ 57:/usr/lib/avr/include/util/delay.h **** used.
+ 58:/usr/lib/avr/include/util/delay.h ****
+ 59:/usr/lib/avr/include/util/delay.h **** The functions in this header file are wrappers around the basic
+ 60:/usr/lib/avr/include/util/delay.h **** busy-wait functions from <util/delay_basic.h>. They are meant as
+ 61:/usr/lib/avr/include/util/delay.h **** convenience functions where actual time values can be specified
+ 62:/usr/lib/avr/include/util/delay.h **** rather than a number of cycles to wait for. The idea behind is
+ 63:/usr/lib/avr/include/util/delay.h **** that compile-time constant expressions will be eliminated by
+ 64:/usr/lib/avr/include/util/delay.h **** compiler optimization so floating-point expressions can be used
+ 65:/usr/lib/avr/include/util/delay.h **** to calculate the number of delay cycles needed based on the CPU
+ 66:/usr/lib/avr/include/util/delay.h **** frequency passed by the macro F_CPU.
+ 67:/usr/lib/avr/include/util/delay.h ****
+ 68:/usr/lib/avr/include/util/delay.h **** \note In order for these functions to work as intended, compiler
+ 69:/usr/lib/avr/include/util/delay.h **** optimizations <em>must</em> be enabled, and the delay time
+ 70:/usr/lib/avr/include/util/delay.h **** <em>must</em> be an expression that is a known constant at
+ 71:/usr/lib/avr/include/util/delay.h **** compile-time. If these requirements are not met, the resulting
+ 72:/usr/lib/avr/include/util/delay.h **** delay will be much longer (and basically unpredictable), and
+ 73:/usr/lib/avr/include/util/delay.h **** applications that otherwise do not use floating-point calculations
+ GAS LISTING /tmp/ccWx46oe.s page 3
+
+
+ 74:/usr/lib/avr/include/util/delay.h **** will experience severe code bloat by the floating-point library
+ 75:/usr/lib/avr/include/util/delay.h **** routines linked into the application.
+ 76:/usr/lib/avr/include/util/delay.h ****
+ 77:/usr/lib/avr/include/util/delay.h **** The functions available allow the specification of microsecond, and
+ 78:/usr/lib/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro
+ 79:/usr/lib/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz).
+ 80:/usr/lib/avr/include/util/delay.h ****
+ 81:/usr/lib/avr/include/util/delay.h **** */
+ 82:/usr/lib/avr/include/util/delay.h ****
+ 83:/usr/lib/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
+ 84:/usr/lib/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
+ 85:/usr/lib/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
+ 86:/usr/lib/avr/include/util/delay.h **** #endif
+ 87:/usr/lib/avr/include/util/delay.h ****
+ 88:/usr/lib/avr/include/util/delay.h **** #ifndef F_CPU
+ 89:/usr/lib/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */
+ 90:/usr/lib/avr/include/util/delay.h **** # warning "F_CPU not defined for <util/delay.h>"
+ 91:/usr/lib/avr/include/util/delay.h **** # define F_CPU 1000000UL
+ 92:/usr/lib/avr/include/util/delay.h **** #endif
+ 93:/usr/lib/avr/include/util/delay.h ****
+ 94:/usr/lib/avr/include/util/delay.h **** #ifndef __OPTIMIZE__
+ 95:/usr/lib/avr/include/util/delay.h **** # warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
+ 96:/usr/lib/avr/include/util/delay.h **** #endif
+ 97:/usr/lib/avr/include/util/delay.h ****
+ 98:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
+ 99:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \
+ 100:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__
+ 101:/usr/lib/avr/include/util/delay.h **** # include <math.h>
+ 102:/usr/lib/avr/include/util/delay.h **** #endif
+ 103:/usr/lib/avr/include/util/delay.h ****
+ 104:/usr/lib/avr/include/util/delay.h **** /**
+ 105:/usr/lib/avr/include/util/delay.h **** \ingroup util_delay
+ 106:/usr/lib/avr/include/util/delay.h ****
+ 107:/usr/lib/avr/include/util/delay.h **** Perform a delay of \c __ms milliseconds, using _delay_loop_2().
+ 108:/usr/lib/avr/include/util/delay.h ****
+ 109:/usr/lib/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a
+ 110:/usr/lib/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz).
+ 111:/usr/lib/avr/include/util/delay.h ****
+ 112:/usr/lib/avr/include/util/delay.h **** The maximal possible delay is 262.14 ms / F_CPU in MHz.
+ 113:/usr/lib/avr/include/util/delay.h ****
+ 114:/usr/lib/avr/include/util/delay.h **** When the user request delay which exceed the maximum possible one,
+ 115:/usr/lib/avr/include/util/delay.h **** _delay_ms() provides a decreased resolution functionality. In this
+ 116:/usr/lib/avr/include/util/delay.h **** mode _delay_ms() will work with a resolution of 1/10 ms, providing
+ 117:/usr/lib/avr/include/util/delay.h **** delays up to 6.5535 seconds (independent from CPU frequency). The
+ 118:/usr/lib/avr/include/util/delay.h **** user will not be informed about decreased resolution.
+ 119:/usr/lib/avr/include/util/delay.h ****
+ 120:/usr/lib/avr/include/util/delay.h **** If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long)
+ 121:/usr/lib/avr/include/util/delay.h **** support, maximal possible delay is 4294967.295 ms/ F_CPU in MHz. For
+ 122:/usr/lib/avr/include/util/delay.h **** values greater than the maximal possible delay, overflows results in
+ 123:/usr/lib/avr/include/util/delay.h **** no delay i.e., 0ms.
+ 124:/usr/lib/avr/include/util/delay.h ****
+ 125:/usr/lib/avr/include/util/delay.h **** Conversion of __us into clock cycles may not always result in integer.
+ 126:/usr/lib/avr/include/util/delay.h **** By default, the clock cycles rounded up to next integer. This ensures that
+ 127:/usr/lib/avr/include/util/delay.h **** the user gets atleast __us microseconds of delay.
+ 128:/usr/lib/avr/include/util/delay.h ****
+ 129:/usr/lib/avr/include/util/delay.h **** Alternatively, user can define __DELAY_ROUND_DOWN__ and __DELAY_ROUND_CLOSEST__
+ 130:/usr/lib/avr/include/util/delay.h **** to round down and round to closest integer.
+ GAS LISTING /tmp/ccWx46oe.s page 4
+
+
+ 131:/usr/lib/avr/include/util/delay.h ****
+ 132:/usr/lib/avr/include/util/delay.h **** Note: The new implementation of _delay_ms(double __ms) with
+ 133:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(unsigned long) support is not backward compatible.
+ 134:/usr/lib/avr/include/util/delay.h **** User can define __DELAY_BACKWARD_COMPATIBLE__ to get a backward compatible delay.
+ 135:/usr/lib/avr/include/util/delay.h **** Also, the backward compatible
+ 136:/usr/lib/avr/include/util/delay.h **** algorithm will be chosen if the code is compiled in a <em>freestanding
+ 137:/usr/lib/avr/include/util/delay.h **** environment</em> (GCC option \c -ffreestanding), as the math functions
+ 138:/usr/lib/avr/include/util/delay.h **** required for rounding are not available to the compiler then.
+ 139:/usr/lib/avr/include/util/delay.h ****
+ 140:/usr/lib/avr/include/util/delay.h **** */
+ 141:/usr/lib/avr/include/util/delay.h **** void
+ 142:/usr/lib/avr/include/util/delay.h **** _delay_ms(double __ms)
+ 143:/usr/lib/avr/include/util/delay.h **** {
+ 144:/usr/lib/avr/include/util/delay.h **** double __tmp ;
+ 145:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
+ 146:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \
+ 147:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__
+ 148:/usr/lib/avr/include/util/delay.h **** uint32_t __ticks_dc;
+ 149:/usr/lib/avr/include/util/delay.h **** extern void __builtin_avr_delay_cycles(unsigned long);
+ 150:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 1e3) * __ms;
+ 151:/usr/lib/avr/include/util/delay.h ****
+ 152:/usr/lib/avr/include/util/delay.h **** #if defined(__DELAY_ROUND_DOWN__)
+ 153:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)fabs(__tmp);
+ 154:/usr/lib/avr/include/util/delay.h ****
+ 155:/usr/lib/avr/include/util/delay.h **** #elif defined(__DELAY_ROUND_CLOSEST__)
+ 156:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(fabs(__tmp)+0.5);
+ 157:/usr/lib/avr/include/util/delay.h ****
+ 158:/usr/lib/avr/include/util/delay.h **** #else
+ 159:/usr/lib/avr/include/util/delay.h **** //round up by default
+ 160:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+ 161:/usr/lib/avr/include/util/delay.h **** #endif
+ 162:/usr/lib/avr/include/util/delay.h ****
+ 163:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(__ticks_dc);
+ 135 .LM3:
+ 136 0014 EFEC ldi r30,lo8(1999)
+ 137 0016 F7E0 ldi r31,hi8(1999)
+ 138 0018 3197 1: sbiw r30,1
+ 139 001a 01F4 brne 1b
+ 140 001c 00C0 rjmp .
+ 141 001e 0000 nop
+ 142 .LBE7:
+ 143 .LBE6:
+ 145 .Ltext2:
+ 147 .LM4:
+ 148 0020 0F5F subi r16,-1
+ 149 0022 1F4F sbci r17,-1
+ 150 0024 2F4F sbci r18,-1
+ 151 0026 3F4F sbci r19,-1
+ 152 0028 00C0 rjmp .L2
+ 153 .L5:
+ 154 /* epilogue start */
+ 9:test.c **** _delay_ms(1);
+ 10:test.c **** }
+ 11:test.c **** }
+ 156 .LM5:
+ 157 002a 1F91 pop r17
+ 158 002c 0F91 pop r16
+ GAS LISTING /tmp/ccWx46oe.s page 5
+
+
+ 159 002e 0895 ret
+ 164 .Lscope1:
+ 166 .stabd 78,0,0
+ 167 .section .text.startup,"ax",@progbits
+ 169 .global main
+ 171 main:
+ 172 .stabd 46,0,0
+ 12:test.c ****
+ 13:test.c **** #define NOOP asm volatile("nop" ::)
+ 14:test.c ****
+ 15:test.c ****
+ 16:test.c **** static void setup_clock( void )
+ 17:test.c **** {
+ 18:test.c **** /*Examine Page 33*/
+ 19:test.c ****
+ 20:test.c **** CLKPR = 0x80; /*Setup CLKPCE to be receptive*/
+ 21:test.c **** CLKPR = 0x00; /*No scalar*/
+ 22:test.c **** OSCCAL = 0x80; //B8 is bottom E8 is top.
+ 23:test.c **** }
+ 24:test.c ****
+ 25:test.c **** int main( )
+ 26:test.c **** {
+ 174 .LM6:
+ 175 .LFBB2:
+ 176 /* prologue: function */
+ 177 /* frame size = 0 */
+ 178 /* stack size = 0 */
+ 179 .L__stack_usage = 0
+ 27:test.c **** cli();
+ 181 .LM7:
+ 182 /* #APP */
+ 183 ; 27 "test.c" 1
+ 184 0000 F894 cli
+ 185 ; 0 "" 2
+ 186 /* #NOAPP */
+ 187 .LBB12:
+ 188 .LBB13:
+ 20:test.c **** CLKPR = 0x00; /*No scalar*/
+ 190 .LM8:
+ 191 0002 80E8 ldi r24,lo8(-128)
+ 192 0004 86BD out 0x26,r24
+ 21:test.c **** OSCCAL = 0x80; //B8 is bottom E8 is top.
+ 194 .LM9:
+ 195 0006 16BC out 0x26,__zero_reg__
+ 22:test.c **** }
+ 197 .LM10:
+ 198 0008 81BF out 0x31,r24
+ 199 .LBE13:
+ 200 .LBE12:
+ 28:test.c **** setup_clock();
+ 29:test.c **** DDRB = _BV(4);
+ 202 .LM11:
+ 203 000a 80E1 ldi r24,lo8(16)
+ 204 000c 87BB out 0x17,r24
+ 30:test.c **** uint8_t marker;
+ 31:test.c ****
+ 32:test.c **** while(1)
+ GAS LISTING /tmp/ccWx46oe.s page 6
+
+
+ 33:test.c **** {
+ 34:test.c **** marker = 0x05;
+ 35:test.c **** do{
+ 36:test.c **** PORTB = _BV(4);
+ 206 .LM12:
+ 207 000e 90E1 ldi r25,lo8(16)
+ 208 .L8:
+ 26:test.c **** cli();
+ 210 .LM13:
+ 211 0010 85E0 ldi r24,lo8(5)
+ 212 .L7:
+ 214 .LM14:
+ 215 0012 98BB out 0x18,r25
+ 37:test.c **** marker--;
+ 38:test.c **** PORTB = 0;
+ 217 .LM15:
+ 218 0014 18BA out 0x18,__zero_reg__
+ 219 0016 8150 subi r24,lo8(-(-1))
+ 39:test.c **** } while( marker );
+ 221 .LM16:
+ 222 0018 01F4 brne .L7
+ 223 .LBB14:
+ 224 .LBB15:
+ 226 .Ltext3:
+ 164:/usr/lib/avr/include/util/delay.h ****
+ 165:/usr/lib/avr/include/util/delay.h **** #else
+ 166:/usr/lib/avr/include/util/delay.h **** uint16_t __ticks;
+ 167:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 4e3) * __ms;
+ 168:/usr/lib/avr/include/util/delay.h **** if (__tmp < 1.0)
+ 169:/usr/lib/avr/include/util/delay.h **** __ticks = 1;
+ 170:/usr/lib/avr/include/util/delay.h **** else if (__tmp > 65535)
+ 171:/usr/lib/avr/include/util/delay.h **** {
+ 172:/usr/lib/avr/include/util/delay.h **** // __ticks = requested delay in 1/10 ms
+ 173:/usr/lib/avr/include/util/delay.h **** __ticks = (uint16_t) (__ms * 10.0);
+ 174:/usr/lib/avr/include/util/delay.h **** while(__ticks)
+ 175:/usr/lib/avr/include/util/delay.h **** {
+ 176:/usr/lib/avr/include/util/delay.h **** // wait 1/10 ms
+ 177:/usr/lib/avr/include/util/delay.h **** _delay_loop_2(((F_CPU) / 4e3) / 10);
+ 178:/usr/lib/avr/include/util/delay.h **** __ticks --;
+ 179:/usr/lib/avr/include/util/delay.h **** }
+ 180:/usr/lib/avr/include/util/delay.h **** return;
+ 181:/usr/lib/avr/include/util/delay.h **** }
+ 182:/usr/lib/avr/include/util/delay.h **** else
+ 183:/usr/lib/avr/include/util/delay.h **** __ticks = (uint16_t)__tmp;
+ 184:/usr/lib/avr/include/util/delay.h **** _delay_loop_2(__ticks);
+ 185:/usr/lib/avr/include/util/delay.h **** #endif
+ 186:/usr/lib/avr/include/util/delay.h **** }
+ 187:/usr/lib/avr/include/util/delay.h ****
+ 188:/usr/lib/avr/include/util/delay.h **** /**
+ 189:/usr/lib/avr/include/util/delay.h **** \ingroup util_delay
+ 190:/usr/lib/avr/include/util/delay.h ****
+ 191:/usr/lib/avr/include/util/delay.h **** Perform a delay of \c __us microseconds, using _delay_loop_1().
+ 192:/usr/lib/avr/include/util/delay.h ****
+ 193:/usr/lib/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a
+ 194:/usr/lib/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz).
+ 195:/usr/lib/avr/include/util/delay.h ****
+ 196:/usr/lib/avr/include/util/delay.h **** The maximal possible delay is 768 us / F_CPU in MHz.
+ GAS LISTING /tmp/ccWx46oe.s page 7
+
+
+ 197:/usr/lib/avr/include/util/delay.h ****
+ 198:/usr/lib/avr/include/util/delay.h **** If the user requests a delay greater than the maximal possible one,
+ 199:/usr/lib/avr/include/util/delay.h **** _delay_us() will automatically call _delay_ms() instead. The user
+ 200:/usr/lib/avr/include/util/delay.h **** will not be informed about this case.
+ 201:/usr/lib/avr/include/util/delay.h ****
+ 202:/usr/lib/avr/include/util/delay.h **** If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long)
+ 203:/usr/lib/avr/include/util/delay.h **** support, maximal possible delay is 4294967.295 us/ F_CPU in MHz. For
+ 204:/usr/lib/avr/include/util/delay.h **** values greater than the maximal possible delay, overflow results in
+ 205:/usr/lib/avr/include/util/delay.h **** no delay i.e., 0us.
+ 206:/usr/lib/avr/include/util/delay.h ****
+ 207:/usr/lib/avr/include/util/delay.h **** Conversion of __us into clock cycles may not always result in integer.
+ 208:/usr/lib/avr/include/util/delay.h **** By default, the clock cycles rounded up to next integer. This ensures that
+ 209:/usr/lib/avr/include/util/delay.h **** the user gets atleast __us microseconds of delay.
+ 210:/usr/lib/avr/include/util/delay.h ****
+ 211:/usr/lib/avr/include/util/delay.h **** Alternatively, user can define __DELAY_ROUND_DOWN__ and __DELAY_ROUND_CLOSEST__
+ 212:/usr/lib/avr/include/util/delay.h **** to round down and round to closest integer.
+ 213:/usr/lib/avr/include/util/delay.h ****
+ 214:/usr/lib/avr/include/util/delay.h **** Note: The new implementation of _delay_us(double __us) with
+ 215:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(unsigned long) support is not backward compatible.
+ 216:/usr/lib/avr/include/util/delay.h **** User can define __DELAY_BACKWARD_COMPATIBLE__ to get a backward compatible delay.
+ 217:/usr/lib/avr/include/util/delay.h **** Also, the backward compatible
+ 218:/usr/lib/avr/include/util/delay.h **** algorithm will be chosen if the code is compiled in a <em>freestanding
+ 219:/usr/lib/avr/include/util/delay.h **** environment</em> (GCC option \c -ffreestanding), as the math functions
+ 220:/usr/lib/avr/include/util/delay.h **** required for rounding are not available to the compiler then.
+ 221:/usr/lib/avr/include/util/delay.h ****
+ 222:/usr/lib/avr/include/util/delay.h **** */
+ 223:/usr/lib/avr/include/util/delay.h **** void
+ 224:/usr/lib/avr/include/util/delay.h **** _delay_us(double __us)
+ 225:/usr/lib/avr/include/util/delay.h **** {
+ 226:/usr/lib/avr/include/util/delay.h **** double __tmp ;
+ 227:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
+ 228:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \
+ 229:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__
+ 230:/usr/lib/avr/include/util/delay.h **** uint32_t __ticks_dc;
+ 231:/usr/lib/avr/include/util/delay.h **** extern void __builtin_avr_delay_cycles(unsigned long);
+ 232:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 1e6) * __us;
+ 233:/usr/lib/avr/include/util/delay.h ****
+ 234:/usr/lib/avr/include/util/delay.h **** #if defined(__DELAY_ROUND_DOWN__)
+ 235:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)fabs(__tmp);
+ 236:/usr/lib/avr/include/util/delay.h ****
+ 237:/usr/lib/avr/include/util/delay.h **** #elif defined(__DELAY_ROUND_CLOSEST__)
+ 238:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(fabs(__tmp)+0.5);
+ 239:/usr/lib/avr/include/util/delay.h ****
+ 240:/usr/lib/avr/include/util/delay.h **** #else
+ 241:/usr/lib/avr/include/util/delay.h **** //round up by default
+ 242:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+ 243:/usr/lib/avr/include/util/delay.h **** #endif
+ 244:/usr/lib/avr/include/util/delay.h ****
+ 245:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(__ticks_dc);
+ 228 .LM17:
+ 229 001a E3E3 ldi r30,lo8(-32205)
+ 230 001c F2E8 ldi r31,hi8(-32205)
+ 231 001e 3197 1: sbiw r30,1
+ 232 0020 01F4 brne 1b
+ 233 0022 00C0 rjmp .
+ 234 0024 0000 nop
+ 235 0026 00C0 rjmp .L8
+ GAS LISTING /tmp/ccWx46oe.s page 8
+
+
+ 236 .LBE15:
+ 237 .LBE14:
+ 239 .Lscope2:
+ 241 .stabd 78,0,0
+ 242 .text
+ 244 .Letext0:
+ 245 .ident "GCC: (GNU) 4.9.2"
+ GAS LISTING /tmp/ccWx46oe.s page 9
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 test.c
+ /tmp/ccWx46oe.s:2 *ABS*:000000000000003e __SP_H__
+ /tmp/ccWx46oe.s:3 *ABS*:000000000000003d __SP_L__
+ /tmp/ccWx46oe.s:4 *ABS*:000000000000003f __SREG__
+ /tmp/ccWx46oe.s:5 *ABS*:0000000000000000 __tmp_reg__
+ /tmp/ccWx46oe.s:6 *ABS*:0000000000000001 __zero_reg__
+ /tmp/ccWx46oe.s:106 .text:0000000000000000 delay_ms
+ /tmp/ccWx46oe.s:171 .text.startup:0000000000000000 main
+
+NO UNDEFINED SYMBOLS
diff --git a/tools/avr_codegen/test.map b/tools/avr_codegen/test.map
new file mode 100644
index 0000000..7a68865
--- /dev/null
+++ b/tools/avr_codegen/test.map
@@ -0,0 +1,379 @@
+Archive member included to satisfy reference by file (symbol)
+
+/usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o (exit)
+
+Memory Configuration
+
+Name Origin Length Attributes
+text 0x0000000000000000 0x0000000000002000 xr
+data 0x0000000000800060 0x000000000000ffa0 rw !x
+eeprom 0x0000000000810000 0x0000000000010000 rw !x
+fuse 0x0000000000820000 0x0000000000000400 rw !x
+lock 0x0000000000830000 0x0000000000000400 rw !x
+signature 0x0000000000840000 0x0000000000000400 rw !x
+user_signatures 0x0000000000850000 0x0000000000000400 rw !x
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+LOAD /tmp/ccNW2tJG.o
+START GROUP
+LOAD /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a
+LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/libm.a
+LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/libc.a
+LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/libattiny85.a
+END GROUP
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text 0x0000000000000000 0x8c
+ *(.vectors)
+ .vectors 0x0000000000000000 0x1e /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ 0x0000000000000000 __vectors
+ 0x0000000000000000 __vector_default
+ *(.vectors)
+ *(.progmem.gcc*)
+ 0x000000000000001e . = ALIGN (0x2)
+ 0x000000000000001e __trampolines_start = .
+ *(.trampolines)
+ .trampolines 0x000000000000001e 0x0 linker stubs
+ *(.trampolines*)
+ 0x000000000000001e __trampolines_end = .
+ *(.progmem*)
+ 0x000000000000001e . = ALIGN (0x2)
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+ 0x000000000000001e __ctors_start = .
+ *(.ctors)
+ 0x000000000000001e __ctors_end = .
+ 0x000000000000001e __dtors_start = .
+ *(.dtors)
+ 0x000000000000001e __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0 0x000000000000001e 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ 0x000000000000001e __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2 0x000000000000001e 0xc /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9 0x000000000000002a 0x4 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ *(.init9)
+ *(.text)
+ .text 0x000000000000002e 0x2 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ 0x000000000000002e __vector_1
+ 0x000000000000002e __vector_12
+ 0x000000000000002e __bad_interrupt
+ 0x000000000000002e __vector_6
+ 0x000000000000002e __vector_3
+ 0x000000000000002e __vector_11
+ 0x000000000000002e __vector_13
+ 0x000000000000002e __vector_7
+ 0x000000000000002e __vector_5
+ 0x000000000000002e __vector_4
+ 0x000000000000002e __vector_9
+ 0x000000000000002e __vector_2
+ 0x000000000000002e __vector_8
+ 0x000000000000002e __vector_14
+ 0x000000000000002e __vector_10
+ .text 0x0000000000000030 0x30 /tmp/ccNW2tJG.o
+ 0x0000000000000030 delay_ms
+ .text 0x0000000000000060 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ 0x0000000000000060 . = ALIGN (0x2)
+ *(.text.*)
+ .text.startup 0x0000000000000060 0x28 /tmp/ccNW2tJG.o
+ 0x0000000000000060 main
+ .text.libgcc.mul
+ 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ .text.libgcc.div
+ 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ .text.libgcc 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ .text.libgcc.prologue
+ 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ .text.libgcc.builtins
+ 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ .text.libgcc.fmul
+ 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ .text.libgcc.fixed
+ 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ 0x0000000000000088 . = ALIGN (0x2)
+ *(.fini9)
+ .fini9 0x0000000000000088 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ 0x0000000000000088 exit
+ 0x0000000000000088 _exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0 0x0000000000000088 0x4 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ *(.fini0)
+ 0x000000000000008c _etext = .
+
+.data 0x0000000000800060 0x0 load address 0x000000000000008c
+ 0x0000000000800060 PROVIDE (__data_start, .)
+ *(.data)
+ .data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ .data 0x0000000000800060 0x0 /tmp/ccNW2tJG.o
+ .data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ *(.data*)
+ *(.rodata)
+ *(.rodata*)
+ *(.gnu.linkonce.d*)
+ 0x0000000000800060 . = ALIGN (0x2)
+ 0x0000000000800060 _edata = .
+ 0x0000000000800060 PROVIDE (__data_end, .)
+
+.bss 0x0000000000800060 0x0
+ 0x0000000000800060 PROVIDE (__bss_start, .)
+ *(.bss)
+ .bss 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+ .bss 0x0000000000800060 0x0 /tmp/ccNW2tJG.o
+ .bss 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.9.2/avr25/libgcc.a(_exit.o)
+ *(.bss*)
+ *(COMMON)
+ 0x0000000000800060 PROVIDE (__bss_end, .)
+ 0x000000000000008c __data_load_start = LOADADDR (.data)
+ 0x000000000000008c __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit 0x0000000000800060 0x0
+ 0x0000000000800060 PROVIDE (__noinit_start, .)
+ *(.noinit*)
+ 0x0000000000800060 PROVIDE (__noinit_end, .)
+ 0x0000000000800060 _end = .
+ 0x0000000000800060 PROVIDE (__heap_start, .)
+
+.eeprom 0x0000000000810000 0x0
+ *(.eeprom*)
+ 0x0000000000810000 __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.user_signatures
+ *(.user_signatures*)
+
+.stab 0x0000000000000000 0x600
+ *(.stab)
+ .stab 0x0000000000000000 0x600 /tmp/ccNW2tJG.o
+
+.stabstr 0x0000000000000000 0xc02
+ *(.stabstr)
+ .stabstr 0x0000000000000000 0xc02 /tmp/ccNW2tJG.o
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment 0x0000000000000000 0x11
+ *(.comment)
+ .comment 0x0000000000000000 0x11 /tmp/ccNW2tJG.o
+ 0x12 (size before relaxing)
+
+.note.gnu.avr.deviceinfo
+ 0x0000000000000000 0x3c
+ .note.gnu.avr.deviceinfo
+ 0x0000000000000000 0x3c /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr25/crtattiny85.o
+
+.note.gnu.build-id
+ *(.note.gnu.build-id)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges
+ *(.debug_aranges)
+
+.debug_pubnames
+ *(.debug_pubnames)
+
+.debug_info
+ *(.debug_info .gnu.linkonce.wi.*)
+
+.debug_abbrev
+ *(.debug_abbrev)
+
+.debug_line
+ *(.debug_line .debug_line.* .debug_line_end)
+
+.debug_frame
+ *(.debug_frame)
+
+.debug_str
+ *(.debug_str)
+
+.debug_loc
+ *(.debug_loc)
+
+.debug_macinfo
+ *(.debug_macinfo)
+
+.debug_weaknames
+ *(.debug_weaknames)
+
+.debug_funcnames
+ *(.debug_funcnames)
+
+.debug_typenames
+ *(.debug_typenames)
+
+.debug_varnames
+ *(.debug_varnames)
+
+.debug_pubtypes
+ *(.debug_pubtypes)
+
+.debug_ranges
+ *(.debug_ranges)
+
+.debug_macro
+ *(.debug_macro)
+OUTPUT(test.elf elf32-avr)
+LOAD linker stubs
diff --git a/tools/avr_codegen/test.o b/tools/avr_codegen/test.o
new file mode 100644
index 0000000..7f4d025
--- /dev/null
+++ b/tools/avr_codegen/test.o
Binary files differ