From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5857 invoked by alias); 19 Jun 2010 16:16:20 -0000 Received: (qmail 5844 invoked by uid 22791); 19 Jun 2010 16:16:17 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_AV,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 19 Jun 2010 16:16:09 +0000 Received: from hpaq2.eem.corp.google.com (hpaq2.eem.corp.google.com [172.25.149.2]) by smtp-out.google.com with ESMTP id o5JGG6d2011862 for ; Sat, 19 Jun 2010 09:16:06 -0700 Received: from gwb19 (gwb19.prod.google.com [10.200.2.19]) by hpaq2.eem.corp.google.com with ESMTP id o5JGG4U3026628 for ; Sat, 19 Jun 2010 09:16:05 -0700 Received: by gwb19 with SMTP id 19so1671211gwb.36 for ; Sat, 19 Jun 2010 09:16:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.124.21 with SMTP id s21mr862637vcr.156.1276964164441; Sat, 19 Jun 2010 09:16:04 -0700 (PDT) Received: by 10.220.189.201 with HTTP; Sat, 19 Jun 2010 09:16:04 -0700 (PDT) In-Reply-To: References: <201006071700.28706.pedro@codesourcery.com> <4C19222C.2000208@codesourcery.com> <201006162016.18181.pedro@codesourcery.com> <4C19265B.7090502@codesourcery.com> <4C1A6362.3020306@vmware.com> Date: Sat, 19 Jun 2010 16:16:00 -0000 Message-ID: Subject: Re: [NEWS/RFA] Re: [gdbserver] x86 agent expression bytecode compiler (speed up conditional tracepoints) From: Doug Evans To: Hui Zhu Cc: Pedro Alves , Stan Shebs , "gdb-patches@sourceware.org" , Eli Zaretskii , "tromey@redhat.com" , Michael Snyder Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-06/txt/msg00428.txt.bz2 Yeah. Until it gets fixed a workaround is to compile linux-x86-low.c with -O0. On Sat, Jun 19, 2010 at 9:12 AM, Hui Zhu wrote: > lubuntu 10.04: > > make[4]: ?????? `/home/teawater/gdb/bgdball/gdb/gdbserver' > rm -f gdbserver > gcc -Wall -g -O2 =A0 =A0-I. -I../../../src/gdb/gdbserver > -I../../../src/gdb/gdbserver/../common > -I../../../src/gdb/gdbserver/../regformats > -I../../../src/gdb/gdbserver/../../include > -Wl,--dynamic-list=3D../../../src/gdb/gdbserver/proc-service.list -o > gdbserver inferiors.o regcache.o remote-utils.o server.o signals.o > target.o utils.o version.o mem-break.o hostio.o event-loop.o > tracepoint.o xml-builtin.o i386-linux.o i386-avx-linux.o > i386-mmx-linux.o linux-low.o linux-x86-low.o i386-low.o i387-fp.o > hostio-errno.o thread-db.o proc-service.o =A0\ > =A0 =A0 =A0 =A0 =A0-ldl > linux-x86-low.o: In function `i386_emit_void_call_2': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2426: > undefined reference to `end_i386_void_call_2_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2426: > undefined reference to `start_i386_void_call_2_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2426: > undefined reference to `start_i386_void_call_2_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2447: > undefined reference to `end_i386_void_call_2_b' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2447: > undefined reference to `start_i386_void_call_2_b' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2447: > undefined reference to `start_i386_void_call_2_b' > linux-x86-low.o: In function `i386_emit_int_call_1': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2398: > undefined reference to `end_i386_int_call_1_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2398: > undefined reference to `start_i386_int_call_1_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2398: > undefined reference to `start_i386_int_call_1_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2412: > undefined reference to `end_i386_int_call_1_c' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2412: > undefined reference to `start_i386_int_call_1_c' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2412: > undefined reference to `start_i386_int_call_1_c' > linux-x86-low.o: In function `i386_emit_swap': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2364: > undefined reference to `end_i386_swap' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2364: > undefined reference to `start_i386_swap' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2364: > undefined reference to `start_i386_swap' > linux-x86-low.o: In function `i386_emit_zero_ext': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2343: > undefined reference to `end_i386_zero_ext_8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2343: > undefined reference to `start_i386_zero_ext_8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2343: > undefined reference to `start_i386_zero_ext_8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2353: > undefined reference to `end_i386_zero_ext_32' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2353: > undefined reference to `start_i386_zero_ext_32' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2353: > undefined reference to `start_i386_zero_ext_32' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2348: > undefined reference to `end_i386_zero_ext_16' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2348: > undefined reference to `start_i386_zero_ext_16' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2348: > undefined reference to `start_i386_zero_ext_16' > linux-x86-low.o: In function `i386_emit_stack_flush': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2332: > undefined reference to `end_i386_stack_flush' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2332: > undefined reference to `start_i386_stack_flush' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2332: > undefined reference to `start_i386_stack_flush' > linux-x86-low.o: In function `i386_emit_pop': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2324: > undefined reference to `end_i386_pop' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2324: > undefined reference to `start_i386_pop' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2324: > undefined reference to `start_i386_pop' > linux-x86-low.o: In function `i386_emit_goto': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2227: > undefined reference to `end_i386_goto' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2227: > undefined reference to `start_i386_goto' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2227: > undefined reference to `start_i386_goto' > linux-x86-low.o: In function `i386_emit_if_goto': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2209: > undefined reference to `end_i386_if_goto' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2209: > undefined reference to `start_i386_if_goto' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2209: > undefined reference to `start_i386_if_goto' > linux-x86-low.o: In function `i386_emit_ref': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2187: > undefined reference to `end_i386_ref1' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2187: > undefined reference to `start_i386_ref1' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2187: > undefined reference to `start_i386_ref1' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2199: > undefined reference to `end_i386_ref8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2199: > undefined reference to `start_i386_ref8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2199: > undefined reference to `start_i386_ref8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2191: > undefined reference to `end_i386_ref2' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2191: > undefined reference to `start_i386_ref2' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2191: > undefined reference to `start_i386_ref2' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2195: > undefined reference to `end_i386_ref4' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2195: > undefined reference to `start_i386_ref4' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2195: > undefined reference to `start_i386_ref4' > linux-x86-low.o: In function `i386_emit_less_unsigned': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2165: > undefined reference to `end_i386_less_unsigned' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2165: > undefined reference to `start_i386_less_unsigned' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2165: > undefined reference to `start_i386_less_unsigned' > linux-x86-low.o: In function `i386_emit_less_signed': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2146: > undefined reference to `end_i386_less_signed' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2146: > undefined reference to `start_i386_less_signed' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2146: > undefined reference to `start_i386_less_signed' > linux-x86-low.o: In function `i386_emit_equal': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2128: > undefined reference to `end_i386_equal' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2128: > undefined reference to `start_i386_equal' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2128: > undefined reference to `start_i386_equal' > linux-x86-low.o: In function `i386_emit_bit_not': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2120: > undefined reference to `end_i386_bit_not' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2120: > undefined reference to `start_i386_bit_not' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2120: > undefined reference to `start_i386_bit_not' > linux-x86-low.o: In function `i386_emit_bit_xor': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2111: > undefined reference to `end_i386_xor' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2111: > undefined reference to `start_i386_xor' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2111: > undefined reference to `start_i386_xor' > linux-x86-low.o: In function `i386_emit_bit_or': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2102: > undefined reference to `end_i386_or' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2102: > undefined reference to `start_i386_or' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2102: > undefined reference to `start_i386_or' > linux-x86-low.o: In function `i386_emit_bit_and': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2093: > undefined reference to `end_i386_and' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2093: > undefined reference to `start_i386_and' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2093: > undefined reference to `start_i386_and' > linux-x86-low.o: In function `i386_emit_log_not': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2082: > undefined reference to `end_i386_log_not' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2082: > undefined reference to `start_i386_log_not' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2082: > undefined reference to `start_i386_log_not' > linux-x86-low.o: In function `i386_emit_ext': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2057: > undefined reference to `end_i386_ext_8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2057: > undefined reference to `start_i386_ext_8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2057: > undefined reference to `start_i386_ext_8' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2070: > undefined reference to `end_i386_ext_32' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2070: > undefined reference to `start_i386_ext_32' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2070: > undefined reference to `start_i386_ext_32' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2064: > undefined reference to `end_i386_ext_16' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2064: > undefined reference to `start_i386_ext_16' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2064: > undefined reference to `start_i386_ext_16' > linux-x86-low.o: In function `i386_emit_sub': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2020: > undefined reference to `end_i386_sub' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2020: > undefined reference to `start_i386_sub' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2020: > undefined reference to `start_i386_sub' > linux-x86-low.o: In function `i386_emit_add': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2011: > undefined reference to `end_i386_add' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2011: > undefined reference to `start_i386_add' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2011: > undefined reference to `start_i386_add' > linux-x86-low.o: In function `i386_emit_epilogue': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:1999: > undefined reference to `end_i386_epilogue' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:1999: > undefined reference to `start_i386_epilogue' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:1999: > undefined reference to `start_i386_epilogue' > linux-x86-low.o: In function `i386_emit_prologue': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:1989: > undefined reference to `end_i386_prologue' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:1989: > undefined reference to `start_i386_prologue' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:1989: > undefined reference to `start_i386_prologue' > linux-x86-low.o: In function `i386_emit_reg': > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2302: > undefined reference to `end_i386_reg_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2302: > undefined reference to `start_i386_reg_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2302: > undefined reference to `start_i386_reg_a' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2311: > undefined reference to `end_i386_reg_b' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2311: > undefined reference to `start_i386_reg_b' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2311: > undefined reference to `start_i386_reg_b' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2316: > undefined reference to `end_i386_reg_c' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2316: > undefined reference to `start_i386_reg_c' > /home/teawater/gdb/bgdball/gdb/gdbserver/../../../src/gdb/gdbserver/linux= -x86-low.c:2316: > undefined reference to `start_i386_reg_c' > collect2: ld returned 1 exit status > make[4]: *** [gdbserver] ?? 1 > make[4]:?????? `/home/teawater/gdb/bgdball/gdb/gdbserver' > make[3]: *** [subdir_do] ?? 1 > make[3]:?????? `/home/teawater/gdb/bgdball/gdb' > make[2]: *** [all] ?? 2 > make[2]:?????? `/home/teawater/gdb/bgdball/gdb' > make[1]: *** [all-gdb] ?? 2 > make[1]:?????? `/home/teawater/gdb/bgdball' > > > On Fri, Jun 18, 2010 at 02:03, Michael Snyder wrote: >> Stan Shebs wrote: >>> >>> Pedro Alves wrote: >>>> >>>> On Wednesday 16 June 2010 20:12:44, Stan Shebs wrote: >>>> >>>>> >>>>> Doug Evans wrote: >>>>> >>>>>> >>>>>> On Mon, Jun 14, 2010 at 3:19 PM, Pedro Alves >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> Thanks. =A0I've checked the whole thing in. >>>>>>> >>>>>> >>>>>> I'm getting build failures that go away when compiling linux-x86-low= .c >>>>>> with -g. >>>>>> >>>>>> gcc is optimizing out the skipped over stuff I believe. >>>>>> >>>>> >>>>> Hmm, this particular trickery was my idea, but it always seemed >>>>> vulnerable to ever-smarter optimization. =A0Does anybody have any bet= ter >>>>> strategy? =A0Declaring the asm volatile didn't work, because the comp= iler was >>>>> whacking everything around it. >>>>> >>>>> The other approach is to build up instructions from bitfields, which = is >>>>> reliable but needs a lot of setup and helper routines. >>>>> >>>> >>>> Quick thought: can we stick a couple of __attribute__((used))'s in the >>>> macro, so the compiler doesn optimized things away, thinking they're >>>> unused (given the uses are behind asm)? >>>> >>> >>> The compiler is discarding the code with the definitions of the labels, >>> because it's thinking they are maybe somewhere else in the program (the >>> error is at link time). =A0Moving the labels into C code would fix that= I >>> think, but then it's hard to guarantee that the compiler won't sneak in= a >>> bit of code between label and asm sequence. >> >> Hurrr. =A0Code that depends on such deep knowledge of the compiler's >> behavior is wrong code, IMO. >> >> >