avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] objdump patch


From: Theodore A. Roth
Subject: Re: [avr-gcc-list] objdump patch
Date: Mon, 6 Sep 2004 17:55:49 -0700 (PDT)

On Mon, 6 Sep 2004, gouy yann wrote:

> Hello,
>
> having the symbols is definitively a good idea.
> by the way, since you ask, I would have prefered:
>
> 20c:       02 c0           rjmp    .+4             ;
> 0x212 <.do_copy_data_start>

The arm port of gcc does it like this:

   0:   ea000006        b       20 <_start>

I think that Yann's suggestion makes the most sense though. Another
thing you might want to consider is parsing. If you do it like Yann
suggests, then you may be less likely to break any code that people
have written to parse the objdump output. That may be a weak argument
though.

Ted

>
> it's just my humble opinion.
>
>
> best regards.
>
>    Yann
>
>  --- "Svein E. Seldal" <address@hidden> a
> écrit :
> > Hello
> >
> > I've grown too annoied by the fact that objdump (-d)
> > does not print any
> > symbol on code-space references. To be a good
> > open-source programmer, I
> > have prepared a patch for binutils to fix this. But
> > before I even try to
> > commit it into gnu binutils, I would like to get
> > your feedback on this.
> >
> > The snippet below shows the changes that I suggest.
> > In short:
> >
> > 20c:       02 c0           rjmp    .+4             ;
> > 0x212
> >
> > becomes
> >
> > 20c:       02 c0           rjmp    0x212
> > <.do_copy_data_start>     ; .+4
> >
> >
> > Does this look nice?  Its downside is that it kind
> > of ruins the
> > right-aliged row of ';' and makes the output more
> > cluttered. But on the
> > upside, it proves it faster and simpler to review
> > code.
> >
> > What I really want to discuss is if we do need the
> > "; .+4" comment in
> > the example above or not. I dont think I will ever
> > need that
> > information, but I'm humble if anyone else protests.
> >
> >
> > The patch is appended in this mail and can be
> > applied with patch:
> >
> > $ cd binutils-2.15
> > $ patch -p0 <avr-binutils-symbprint.diff
> >
> > It patches cleanly angainst binutils HEAD, 2.15 and
> > 2.14 (and maybe older).
> >
> >
> > Regards,
> > Svein Seldal
> >
> >
> > Example:
> >
> >
> > 00000202 <__do_copy_data>:
> >       202:       11 e0           ldi     r17, 0x01
> >     ; 1
> >       204:       a0 e0           ldi     r26, 0x00
> >     ; 0
> >       206:       b1 e0           ldi     r27, 0x01
> >     ; 1
> >       208:       e0 e2           ldi     r30, 0x20
> >     ; 32
> >       20a:       f5 e3           ldi     r31, 0x35
> >     ; 53
> >       20c:       02 c0           rjmp    0x212
> > <.do_copy_data_start>
> >   ; .+4
> >
> > 0000020e <.do_copy_data_loop>:
> >       20e:       05 90           lpm     r0, Z+
> >       210:       0d 92           st      X+, r0
> >
> > 00000212 <.do_copy_data_start>:
> >       212:       ae 31           cpi     r26, 0x1E
> >     ; 30
> >       214:       b1 07           cpc     r27, r17
> >       216:       d9 f7           brne    0x20e
> > <.do_copy_data_loop>
> >   ; .-10
> >
> > 00000218 <__do_clear_bss>:
> >       218:       11 e0           ldi     r17, 0x01
> >     ; 1
> >       21a:       ae e1           ldi     r26, 0x1E
> >     ; 30
> >       21c:       b1 e0           ldi     r27, 0x01
> >     ; 1
> >       21e:       01 c0           rjmp    0x222
> > <.do_clear_bss_start>
> >   ; .+2
> >
> > 00000220 <.do_clear_bss_loop>:
> >       220:       1d 92           st      X+, r1
> >
> > 00000222 <.do_clear_bss_start>:
> >       222:       aa 3f           cpi     r26, 0xFA
> >     ; 250
> >       224:       b1 07           cpc     r27, r17
> >       226:       e1 f7           brne    0x220
> > <.do_clear_bss_loop>
> >   ; .-8
> > > ? avr-binutils-symprint.diff
> > ? build.avr
> > ? build.native
> > ? gas/doc/as.info
> > Index: opcodes/avr-dis.c
> >
> ===================================================================
> > RCS file: /cvs/src/src/opcodes/avr-dis.c,v
> > retrieving revision 1.10
> > diff -c -3 -p -r1.10 avr-dis.c
> > *** opcodes/avr-dis.c       18 Nov 2002 16:54:08 -0000
> > 1.10
> > --- opcodes/avr-dis.c       6 Sep 2004 14:31:07 -0000
> > *************** const struct avr_opcodes_s
> > avr_opcodes[]
> > *** 43,52 ****
> >   };
> >
> >   static int avr_operand PARAMS ((unsigned int,
> > unsigned int,
> > !                           unsigned int, int, char *, char *, int));
> >
> >   static int
> > ! avr_operand (insn, insn2, pc, constraint, buf,
> > comment, regs)
> >        unsigned int insn;
> >        unsigned int insn2;
> >        unsigned int pc;
> > --- 43,52 ----
> >   };
> >
> >   static int avr_operand PARAMS ((unsigned int,
> > unsigned int,
> > !                           unsigned int, int, char *, char *, int, int *,
> > bfd_vma *));
> >
> >   static int
> > ! avr_operand (insn, insn2, pc, constraint, buf,
> > comment, regs, sym, sym_addr)
> >        unsigned int insn;
> >        unsigned int insn2;
> >        unsigned int pc;
> > *************** avr_operand (insn, insn2, pc,
> > constraint
> > *** 54,61 ****
> > --- 54,64 ----
> >        char *buf;
> >        char *comment;
> >        int regs;
> > +      int *sym;
> > +      bfd_vma *sym_addr;
> >   {
> >     int ok = 1;
> > +   *sym = 0;
> >
> >     switch (constraint)
> >       {
> > *************** avr_operand (insn, insn2, pc,
> > constraint
> > *** 145,167 ****
> >         break;
> >
> >       case 'h':
> > !       sprintf (buf, "0x%x",
> > !          ((((insn & 1) | ((insn & 0x1f0) >> 3)) <<
> > 16) | insn2) * 2);
> >         break;
> >
> >       case 'L':
> >         {
> >     int rel_addr = (((insn & 0xfff) ^ 0x800) - 0x800)
> > * 2;
> > !   sprintf (buf, ".%+-8d", rel_addr);
> > !   sprintf (comment, "0x%x", pc + 2 + rel_addr);
> >         }
> >         break;
> >
> >       case 'l':
> >         {
> >     int rel_addr = ((((insn >> 3) & 0x7f) ^ 0x40) -
> > 0x40) * 2;
> > !   sprintf (buf, ".%+-8d", rel_addr);
> > !   sprintf (comment, "0x%x", pc + 2 + rel_addr);
> >         }
> >         break;
> >
> > --- 148,175 ----
> >         break;
> >
> >       case 'h':
> > !       *sym = 1;
> > !       *sym_addr = ((((insn & 1) | ((insn & 0x1f0)
> > >> 3)) << 16) | insn2) * 2;
> > !       sprintf (buf, "0x");
> >         break;
> >
> >       case 'L':
> >         {
> >     int rel_addr = (((insn & 0xfff) ^ 0x800) - 0x800)
> > * 2;
> > !   sprintf (comment, ".%+-8d", rel_addr);
> > !         *sym = 1;
> > !         *sym_addr = pc + 2 + rel_addr;
> > !   sprintf (buf, "0x");
> >         }
> >         break;
> >
> >       case 'l':
> >         {
> >     int rel_addr = ((((insn >> 3) & 0x7f) ^ 0x40) -
> > 0x40) * 2;
> > !   sprintf (comment, ".%+-8d", rel_addr);
> > !         *sym = 1;
> > !         *sym_addr = pc + 2 + rel_addr;
> > !   sprintf (buf, "0x");
> >         }
> >         break;
> >
> > *************** print_insn_avr(addr, info)
> > *** 265,270 ****
> > --- 273,280 ----
> >     int cmd_len = 2;
> >     int ok = 0;
> >     char op1[20], op2[20], comment1[40],
> > comment2[40];
> > +   int sym_op1 = 0, sym_op2 = 0;
> > +   bfd_vma sym_addr1, sym_addr2;
> >
> >     if (!initialized)
> >       {
> > *************** print_insn_avr(addr, info)
> > *** 336,346 ****
> >     {
> >       int regs = REGISTER_P (*op);
> >
> > !     ok = avr_operand (insn, insn2, addr, *op, op1,
> > comment1, 0);
> >
> >       if (ok && *(++op) == ',')
> >         ok = avr_operand (insn, insn2, addr, *(++op),
> > op2,
> > !                         *comment1 ? comment2 : comment1, regs);
> >     }
> >       }
> >
> > --- 346,356 ----
> >     {
> >       int regs = REGISTER_P (*op);
> >
> > !     ok = avr_operand (insn, insn2, addr, *op, op1,
> > comment1, 0, &sym_op1, &sym_addr1);
> >
> >       if (ok && *(++op) == ',')
> >         ok = avr_operand (insn, insn2, addr, *(++op),
> > op2,
> > !                         *comment1 ? comment2 : comment1, regs,
> > &sym_op2, &sym_addr2);
> >     }
> >       }
> >
> > *************** print_insn_avr(addr, info)
> > *** 356,366 ****
> >     (*prin) (stream, "%s", ok ? opcode->name :
> > ".word");
> >
> >     if (*op1)
> > !     (*prin) (stream, "\t%s", op1);
> >
> >     if (*op2)
> >       (*prin) (stream, ", %s", op2);
> >
> >     if (*comment1)
> >       (*prin) (stream, "\t; %s", comment1);
> >
> > --- 366,382 ----
> >     (*prin) (stream, "%s", ok ? opcode->name :
> > ".word");
> >
> >     if (*op1)
> > !       (*prin) (stream, "\t%s", op1);
> > !
> > !   if (sym_op1)
> > !     info->print_address_func(sym_addr1, info);
> >
> >     if (*op2)
> >       (*prin) (stream, ", %s", op2);
> >
> > +   if (sym_op2)
> > +     info->print_address_func(sym_addr2, info);
> > +
> >     if (*comment1)
> >       (*prin) (stream, "\t; %s", comment1);
> >
> > > _______________________________________________
> > avr-gcc-list mailing list
> > address@hidden
> > http://www.avr1.org/mailman/listinfo/avr-gcc-list
> >
>
> =====
>
>
>
>
>
>
>
> Vous manquez d’espace pour stocker vos mails ?
> Yahoo! Mail vous offre GRATUITEMENT 100 Mo !
> Créez votre Yahoo! Mail sur http://fr.benefits.yahoo.com/
>
> Le nouveau Yahoo! Messenger est arrivé ! Découvrez toutes les nouveautés pour 
> dialoguer instantanément avec vos amis. A télécharger gratuitement sur 
> http://fr.messenger.yahoo.com
>
> _______________________________________________
> avr-gcc-list mailing list
> address@hidden
> http://www.avr1.org/mailman/listinfo/avr-gcc-list
>
>

---
Ted Roth
PGP Key ID: 0x18F846E9
Jabber ID: address@hidden


reply via email to

[Prev in Thread] Current Thread [Next in Thread]