Author: dim
Date: Wed Aug 29 18:49:41 2012
New Revision: 239872
URL: http://svn.freebsd.org/changeset/base/239872

Log:
  Teach libdwarf about the DW_FORM_flag_present dwarf attribute, so
  programs using libdwarf (such as ctfconvert) don't error out on files
  containing the attribute.
  
  MFC after:    2 weeks

Modified:
  head/lib/libdwarf/dwarf.h
  head/lib/libdwarf/dwarf_attrval.c
  head/lib/libdwarf/dwarf_dump.c
  head/lib/libdwarf/dwarf_init.c

Modified: head/lib/libdwarf/dwarf.h
==============================================================================
--- head/lib/libdwarf/dwarf.h   Wed Aug 29 18:40:12 2012        (r239871)
+++ head/lib/libdwarf/dwarf.h   Wed Aug 29 18:49:41 2012        (r239872)
@@ -184,6 +184,7 @@
 #define DW_FORM_ref8                   0x14
 #define DW_FORM_ref_udata              0x15
 #define DW_FORM_indirect               0x16
+#define DW_FORM_flag_present           0x19
 
 #define DW_OP_addr                     0x03
 #define DW_OP_deref                    0x06

Modified: head/lib/libdwarf/dwarf_attrval.c
==============================================================================
--- head/lib/libdwarf/dwarf_attrval.c   Wed Aug 29 18:40:12 2012        
(r239871)
+++ head/lib/libdwarf/dwarf_attrval.c   Wed Aug 29 18:49:41 2012        
(r239872)
@@ -101,6 +101,7 @@ dwarf_attrval_flag(Dwarf_Die die, uint64
        } else {
                switch (av->av_form) {
                case DW_FORM_flag:
+               case DW_FORM_flag_present:
                        *valp = (Dwarf_Bool) av->u[0].u64;
                        break;
                default:

Modified: head/lib/libdwarf/dwarf_dump.c
==============================================================================
--- head/lib/libdwarf/dwarf_dump.c      Wed Aug 29 18:40:12 2012        
(r239871)
+++ head/lib/libdwarf/dwarf_dump.c      Wed Aug 29 18:49:41 2012        
(r239872)
@@ -240,6 +240,8 @@ get_form_desc(uint32_t form)
                return "DW_FORM_data8";
        case DW_FORM_flag:
                return "DW_FORM_flag";
+       case DW_FORM_flag_present:
+               return "DW_FORM_flag_present";
        case DW_FORM_indirect:
                return "DW_FORM_indirect";
        case DW_FORM_ref1:
@@ -648,6 +650,7 @@ dwarf_dump_av(Dwarf_Die die, Dwarf_AttrV
        case DW_FORM_data4:
        case DW_FORM_data8:
        case DW_FORM_flag:
+       case DW_FORM_flag_present:
                printf("%llu", (unsigned long long) av->u[0].u64);
                break;
        case DW_FORM_ref1:

Modified: head/lib/libdwarf/dwarf_init.c
==============================================================================
--- head/lib/libdwarf/dwarf_init.c      Wed Aug 29 18:40:12 2012        
(r239871)
+++ head/lib/libdwarf/dwarf_init.c      Wed Aug 29 18:49:41 2012        
(r239872)
@@ -396,6 +396,10 @@ dwarf_init_attr(Dwarf_Debug dbg, Elf_Dat
                avref.u[1].s = elf_strptr(dbg->dbg_elf,
                    dbg->dbg_s[DWARF_debug_str].s_shnum, avref.u[0].u64);
                break;
+       case DW_FORM_flag_present:
+               /* This form has no value encoded in the DIE. */
+               avref.u[0].u64 = 1;
+               break;
        default:
                DWARF_SET_ERROR(error, DWARF_E_NOT_IMPLEMENTED);
                ret = DWARF_E_NOT_IMPLEMENTED;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to